假设我在文本文件中有以下三行:
I have a dog
The dog is goood
The cat runs well
现在我需要查看该文件。并打印单词dog
出现的行以及出现的字段no。我需要通过awk
完成此任务。
在处理线路时,有没有办法可以按顺序增加字段数,如下所示:
more abc.txt | awk ' j = $NF for (i =1 ; i<= j ; ++i) if ( $N$i == "dog") n= $N0" "$i '
如何在awk中循环显示一行的字段?
答案 0 :(得分:3)
awk '{for(i=1; i<=NF; i++) {if($i=="dog") print $0,i}}' file
输出:
I have a dog 4 The dog is goood 2
我假设每行只包含一次搜索过的字符串。
答案 1 :(得分:1)
$NF
包含最后一个字段值,i
是一个数字,$i
是指该数字上的字段值。 $N$i
表示字段编号0
(整行,因为N
未初始化)连接到字段编号i
的值。你几乎每件事都做错了。尝试:
more abc.txt | awk '{for (i =1; i<=NF ; i++) if ($i == "dog") print $0 i}'
答案 2 :(得分:0)
<强>解决方案:强>
awk '/dog/ {for(i=NF;i>=1;i--) {if($i~/dog/) {$0=i":"$0}} print}' file
输入文件:
I have a dog
The dog is a good doggie
The cat runs well
<强>输出:强>
4:I have a dog
2:6:The dog is a good doggie
功能强>
首先检查该行是否包含所需的文本,然后才能在字段中循环(虽然我认为这不会提供更多的加速)
不仅会找到与所需文字相同的字段,还会找到包含
打印与所需文字匹配的所有字段的字段编号