使用grep时,如何在输出前添加索引号?

时间:2017-06-05 17:15:45

标签: grep

我正在研究模拟化学反应并希望跟踪原子运动。这个动作写在一个具有不同时间步长的大文件中。我想在每个时间步中获得原子ID(每个时间步长都是唯一的)。但是,输出

`grep -ni " 6557 " filename`

具有不同的行号,很难与时间步长相关联。

  

1117:O 6557 0.000000 0.000000
  5189:O 6557 0.000000 0.000000

     

21491:Fe 6557 0.000000 0.000000

使用grep命令时,如何在输出前添加索引号(NOT行号)?如下所示:

  

1 O 6557 0.000000 0.000000

     

2 O 6557 0.000000 0.000000

     

3 Fe 6557 0.000000 0.000000

非常感谢。

3 个答案:

答案 0 :(得分:1)

我建议 awk 解决方案:

awk '$0~/ 6557 /{ print ++c, $0}' filename

如果您仍想处理grep命令 - 将其与GNU nl命令(用于对文件行进行编号)组合:

grep -i ' 6557 ' filename | nl -n ln

答案 1 :(得分:1)

GNU cat可以这样做:

grep " 6557 " filename | cat -n

或者你可以用perl手动完成:

perl -ne 'print ++$c, " ", $_ if / 6557 /' filename

答案 2 :(得分:0)

我发现通过以下方式将awkgrep一起使用可以使数字输出的位置更好,并且可读性强:

$ grep fruit list.txt
fruit:apples
fruit:oranges
fruit:bananas
fruit:lemons

$ grep fruit list.txt | awk '{print NR, $0}'
1 fruit:apples
2 fruit:oranges
3 fruit:bananas
4 fruit:lemons