awk 配列を印刷し、特殊文字をコンマで置き換えます。

awk 配列を印刷し、特殊文字をコンマで置き換えます。

タイトルがこれを正しく説明することを願っています。現在のスプレッドシートで一意の値を計算した後、配列を印刷しようとしています。

私のawkコマンドはうまくいきます。

awk -F"," 'NR>1{col[$1,$9]++} END {for (i in col) printf("%s: %d\n", i, col[i])}' my_file.csv | sort

印刷すると、疑問符のように見える特殊文字が表示されます。

出力

年と季節の間にカンマ + スペースを使用して印刷するにはどうすればよいですか?

例:1896、夏:151

ベストアンサー1

awkは[$1,$9]これを擬似多次元配列として扱い、内部SUBSEP文字を挿入します。この内容は次のように記録されます。GNU Awkユーザーガイドたとえば、

サブセット

下付き文字の区切り記号。デフォルト値は「\ 034」で、多次元配列のインデックス部分を区切るために使用されます。したがって、 'foo["A", "B"]' 式は実際には foo["A\034B"] にアクセスします (多次元配列セクションを参照)。

前任者。

$ echo 'A,A' | gawk -F, '{col[$1,$2]++} END{for(i in col) print i}' | od -to1
0000000 101 034 101 012
0000004

文字列のリテラル値でインデックス付けされた1D配列が必要な場合、[$1 "," $9]またはより一般的なアプローチを使用できます[$1 FS $9](後者は、異なる区切り文字を持つデータに対してソリューションが機能することを保証します)。

$ echo 'A,A' | gawk -F, '{col[$1 FS $2]++} END{for(i in col) print i}'
A,A

カンマ + スペースが必要な場合は、block を有効または設定してください[$1 FS" " $2]SUBSEP = FS" "BEGIN

おすすめ記事