
awkまたはsedを使用して、ファイル内の特定の列(タブで区切られた)にカンマで区切られた要素の数を計算する方法は?
例:
AC 1,23,5
DC 2,8,89
次を返します。
AC 3
DC 3
答え1
$ awk -F '[\t,]' '{print $1, NF-1}' some_file
どこ
-F
フィールド区切り記号(タブまたはカンマ)を設定します。$1
最初のフィールド参照NF
レコードのフィールド数を含む組み込み変数。- awkステートメントは各レコード(つまり各行)に対して実行されます。
答え2
awk -v col=2 -F '\t' '{$col=gsub(",", "", $col)+1; print}'
col
は、分析の列番号を表すパラメータとして-v
2として指定されます。
-F '\t'
フィールド区切り記号をタブ1に設定します。gsub
置換回数を返すので、コンマ数を計算するために使用されます。結果は分析列に割り当てられ、print
結果としてすべての列が表示されます。
$ cat input
AC 1,23,5
DC 2,8,89
XX 3,4,5,6,7 YYY,ZZZ
$ awk --assign col=2 -F '\t' '{$col=gsub(",", "", $col)+1; print}' < input
AC 3
DC 3
XX 5 YYY,ZZZ
一部のawk 実装では解析できない場合があり\t
、この場合 Bash 固有の機能を使用できます。引用する- $'\t'
- タブ文字自体をawkに渡します。