awkで末尾のカンマを避けながら出力レコードを ','で区切る方法

awkで末尾のカンマを避けながら出力レコードを ','で区切る方法

次のawk文とその出力を考慮してください。

$ awk -F "/" '/\/tcp/ {print $1}' input_file

10\n
20\n

私が望む出力は次のとおりです。

10,20

私が試したことは次のとおりです。

$ awk -F "/" 'BEGIN{ORS=","} /\/tcp/ {print $1}' input_file
10,20,

最後にカンマを削除する方法は?

ベストアンサー1

ORSをに設定しないでください。,これはスクリプトの出力が改行で終わらないため、POSIXでは有効なテキストファイルではないため、それを使用して呼び出す他のスクリプトと同じことを行います。代わりに、プラットフォームが持っている必要があるすべての値を保持するようにORSをそのままにして、,出力したいすべての文字列の前に最初の文字列を除くすべての文字列を印刷します。

awk -F '/' '/\/tcp/{printf "%s%s", sep, $1; sep=","} END{print ""}'

たとえば、

$ seq 3 | awk '{printf "%s%s", sep, $0; sep=","} END{print ""}'
1,2,3

おすすめ記事