以下を含む.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
のカウンタをインクリメントします。 2番目に読み取るとき、指定された行のカウンタが1より大きいかどうかをテストします。 trueの場合、配列のカウンタをインクリメントし、サフィックスとカウンタ値を追加します。その後、ラインを印刷します。a
>
file
b
_