1行でカンマ区切りの文字数を計算する

1行でカンマ区切りの文字数を計算する

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は、分析の列番号を表すパラメータとして-v2として指定されます。

-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に渡します。

関連情報