我有一个 .txt 文件,其中包含:
>ABC
hello
>ABC
thanks
>ABC
for
>ABC
your
>ABC
help
我想将包含“>”的重复字符串更改为:
>ABC_1
hello
>ABC_2
thanks
>ABC_3
for
>ABC_4
your
>ABC_5
help
答案1
$ awk '{print $0 (/^>/ ? "_" (++c) : "")}' file
>ABC_1
hello
>ABC_2
thanks
>ABC_3
for
>ABC_4
your
>ABC_5
help
如果第一个字段可能会有所不同,并且您希望每个第一个字段值有一个唯一的计数,那么您只需将计数设置为由第一个字段索引的数组即可:
$ cat file
>ABC
hello
>FOO
thanks
>ABC
for
>ABC
your
>FOO
help
$ awk '{print $0 (/^>/ ? "_" (++c[$1]) : "")}' file
>ABC_1
hello
>FOO_1
thanks
>ABC_2
for
>ABC_3
your
>FOO_2
help
答案2
和awk
:
awk '
NR==FNR && index($0, ">")==1 { a[$0]++ }
NR!=FNR && a[$0]>1 { $0=$0"_"(++b[$0]) }
NR!=FNR
' file file
第一次读取时,为以 开头的每一行file
增加数组中的计数器。 当第二次读取时,测试给定行的计数器是否大于 1。如果为 true,则增加数组中的计数器 并附加后缀和计数器值。然后打印该行。a
>
file
b
_