循环遍历 awk 中的字段

awk*_*ist 7 awk sed

假设我在文本文件中有以下三行:

I have a dog 
The dog is goood
The cat runs well
Run Code Online (Sandbox Code Playgroud)

现在我需要查看文件。并打印单词dog出现的行以及它出现的字段编号。我需要通过awk.

有什么方法可以在处理一行时按顺序增加字段编号,如下所示:

more abc.txt | awk ' j = $NF for (i =1 ; i<= j ; ++i) if ( $N$i == "dog") n= $N0" "$i '
Run Code Online (Sandbox Code Playgroud)

如何在awk中循环一行的字段?

Cyr*_*rus 16

awk '{for(i=1; i<=NF; i++) {if($i=="dog") print $0,i}}' file
Run Code Online (Sandbox Code Playgroud)

输出:

我有一只狗 4
狗很好 2

我假设每一行只包含搜索的字符串一次。


sim*_*lev 5

解决方案:

awk '/dog/ {for(i=NF;i>=1;i--) {if($i~/dog/) {$0=i":"$0}} print}' file
Run Code Online (Sandbox Code Playgroud)

输入文件:

I have a dog 
The dog is a good doggie
The cat runs well
Run Code Online (Sandbox Code Playgroud)

输出:

4:I have a dog 
2:6:The dog is a good doggie
Run Code Online (Sandbox Code Playgroud)

特征:

  • 在循环遍历字段之前首先检查该行是否包含所需的文本(尽管我认为这不会提供太多加速)

  • 不仅查找与所需文本相同的字段,还查找包含该文本的字段

  • 打印与所需文本匹配的行中所有字段的字段号