我需要在与文件中特定模式匹配的行前面添加行计数器,同时仍然输出与此模式不匹配的行。
例如,如果我的文件如下所示:
aaa 123
bbb 456
aaa 666
ccc 777
bbb 999
我想要计算的模式是'aaa'和'ccc',我想获得以下输出:
1:aaa 123
bbb 456
2:aaa 666
3:ccc 777
bbb 999
最好是我正在寻找一个Linux单线程。只要在大多数发行版中默认安装Shell或工具,它就无关紧要。
答案 0 :(得分:2)
使用以下代码。 perl
中有以下方法open FH,"<abc.txt";
$incremental_val = 1;
while(my $line = <FH>){
chomp($line);
if($line =~ m/^aaa / || $line =~ m/^ccc /){
print "$incremental_val : $line\n";
$incremental_val++;
next;
}
print "$line\n";
}
close FH;
输出如下。
1 : aaa 123
bbb 456
2 : aaa 666
3 : ccc 777
bbb 999
答案 1 :(得分:2)
使用awk
:
awk '{if ($1=="aaa" || $1=="ccc") {a++; $0=a":"$0}} {print}' file
1: aaa 123
bbb 456
2: aaa 666
3: ccc 777
bbb 999
循环检查第一个字段是aaa
还是ccc
。如果是,请使用变量$0
附加行(a
)并自动递增。最后,在所有情况下都打印该行:如果匹配的模式在开头会有a
,那么只有原始行。