awk/sed:将计数器附加到多个不同的字符串

awk/sed:将计数器附加到多个不同的字符串

我有一个文本文件,并且想将一个计数器附加到多个感兴趣的不同字符串中。一个例子infile

string_of_interest
abcd
efgh
another_string_of_interest
ijkl
abcd
another_string_of_interest
mnop
wxyz
string_of_interest
ijkl
wxyz
another_good_string
abcd
efgh
another_string_of_interest

正如您所看到的,有多个字符串需要忽略,其中一些可能会重复,但我只想计算字符串子集的重复次数以生成如下outfile所示的结果:

string_of_interest_1
abcd
efgh
another_string_of_interest_1
ijkl
abcd
another_string_of_interest_2
mnop
wxyz
string_of_interest_2
ijkl
wxyz
another_good_string_1
abcd
efgh
another_string_of_interest_3

请注意,计数器使用蛇形命名法作为每个字符串的一部分附加。

我已经摸索sedawk尝试过,但我太新手了,还远远没有接近。有什么建议吗?

答案1

如果您感兴趣的字符串的所有行都包含一个关键字符串,例如"string",你可以这样做:

awk '/string/{ $0=$0 "_" ++seen[$0] }1' infile

否则使用下面的代码,即为与相应感兴趣的字符串匹配的每一行为其附加一个递增计数器。

awk '
    $0 == "string_of_interest" ||
    $0 == "another_string_of_interest" ||
    $0 == "another_good_string" { $0=$0 "_" ++seen[$0] } 1
' infile

相关内容