awkは文字列の後のすべての数字だけを合計します。

awkは文字列の後のすべての数字だけを合計します。

次の入力を含むファイルがあります。

abc
def
ghi
23
54
12
tuy
12
iuy
56
67

文字行の後にすべての数字を追加し、次のように文字の前に印刷したいと思います。

abc
def
ghi 89
tuy 12
iuy 123

誰でも助けることができますか?

ベストアンサー1

配列を使用してすべての合計を保存し、ENDセクションに印刷しますが、ゼロ合計は抑制します。

awk '/^[^0-9]/ {IX = $0} {SUM[IX] += $0} END {for (s in SUM) print s, SUM[s]?SUM[s]:""}' file
abc 
ghi 89
iuy 123
tuy 12
def 

たとえば、配列インデックスがコピーされる順序は(s in SUM)定義されていません。発生順に出力が必要な場合は、追加(簡単)測定が必要です。

おすすめ記事