シェルスクリプトでリストの内容の番号を変更するのではなく、リストの番号だけを変更する方法はありますか?たとえば、
3. cat
1. hat
2. mouse
次のように変更します。
1. cat
2. hat
3. mouse
ありがとうございます。
ベストアンサー1
簡単に:
awk '$1=NR "."'
これにより、最初のフィールド(スペースの前の最初のテキスト)が行(レコード)番号と点に変わります。レコード番号は常に正で0より大きいため、割り当て結果は常にtrueになり、行(レコード)が印刷されると最初のフィールドが変更されます。
最初のフィールドが変更されると、NF(フィールド数)とゼロフィールド($ 0)が再計算され、繰り返されるすべてのスペースを1つのスペースに変換します。
つまり、複数の隣接する空白(およびタブ)を含む行が単一の空白にマージされます。
awk処理で複数のスペースを回収する必要がある場合は、より複雑になります(GNU awkにのみpatsplitがあります)。
awk '{
n=patsplit($0,f,/[^ \t\n]+/,s); # split the line storing whitespace.
f[1] = NR "." # only change actually needed.
for(i=0;i<=n;i++) # for all fields (and separators)
{
printf("%s%s",f[i],s[i]) # print each field and separator.
}
print("") # cause the printing of an OFS
}
' patsplitfile