循环通过awk中的字段

时间:2018-04-21 21:25:55

标签: awk sed

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

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中循环显示一行的字段?

3 个答案:

答案 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

功能

  • 首先检查该行是否包含所需的文本,然后才能在字段中循环(虽然我认为这不会提供更多的加速)

  • 不仅会找到与所需文字相同的字段,还会找到包含

  • 的字段
  • 打印与所需文字匹配的所有字段的字段编号