更详细地说,我一直在执行一项任务,要求我查找目录下所有大写的文件,保存在没有重叠条目的txt文件中,并表示目录如下所示。
website.com - - [date/date/date:date:date:date -0400] "GET /elv/HELLO/wave.gif HTTP/1.0" 200 1318
website.com - - [date/date/date:date:date:date -0400] "GET /elv/ball.gif HTTP/1.0" 200 306我试过:
grep "/elv/" (filename.txt) | awk '{print $7}' |
awk -F/ '{print $3}' | grep ^[A-Z] | sort -u > elv.txt我已经明白了
grep "/elv/" (filename.txt)
awk '{print $7}'
grep ^[A-Z]
sort -u > elv.txt但是我不明白为什么代码
awk -F/ '{print $3}' 才是必要的。它是否习惯于不注册$7的其余部分通过CAPITALISED_WORD之后的/elv/CAPITALISED_WORD
我试过了
grep "/elv/" (filename.txt) | awk '{print $7}' |
awk -F/ '{print $3}' | grep ^[A-Z] | sort -u > elv.txt对于我的初始测试,结果是在一个txt文件中,所有名称都是在/elv/之后大写的。
HELLO
(list of other capitalised words)但当我试着
grep "/elv/" (filename.txt) | awk '{print $7}' | grep ^[A-Z] |
sort -u > elv.txttxt文件将显示为空白。
我会想,如果我做了第一次尝试,它就会给出一个类似于这样的文本文件。
HELLO/wave.gif编辑以求更清晰
发布于 2022-10-31 05:43:16
您可以使用这个awk,它将2个grep和2个awk命令组合成一个:
awk '/\/elv\// && split($7, a, /\//) && a[3] ~ /^[A-Z]/ {print a[3]}' file |
sort -u
HELLO回答你的问题:
awk -F/ '{print $3}'在由/拆分的记录中打印第三列。
有关awk命令的详细信息:
/\/elv\//:如果输入行与文本/elv/&& split($7, a, /\//):匹配,如果第7字段可以由/&& a[3] ~ /^[A-Z]/:拆分,如果拆分数组中的第3字段以大写letter{print a[3]}:开头,则打印split数组的第3元素
https://stackoverflow.com/questions/74258792
复制相似问题