awkのフィールド数を制限する方法は?

awkのフィールド数を制限する方法は?

以下は私のテストファイルです。

aa, bb, cc
dd, ee
ff, gg, hh

awk各レコードにはフィールドが2つだけあり、レコード区切り文字が最初のフィールドであると考えることは可能ですか,?したがって、私の例では、$2各レコードの値は次のようになります。

bb, cc
ee
gg, hh

答え1

次の方法で行われており、うまく機能します。

上記の質問では、私は2ドルと3ドルだけが2ドルと見なされるべきであることを理解しています。

注文する

awk -F " " '{$2=$2$3;print $1,$2}' filename

答え2

Perl現在のレコードを分割するフィールドの数を指定します。あなたの場合は2です。

このオプションは、カンマを区切り文字として使用して、現在のレコードを2つのフィールドに分割します-F$_

$ perl -F'/,/,$_,2' -lane '
    print "\$0=<<$_>>";
    print "\$1=<<$F[0]>> \$2=<<$F[1]>>", "\n";
' file.csv

read2つの引数を提供することで、bashの組み込み機能を効果的に使用することもできます。

  while IFS=, read -r f1 f2; do
     # $1 = f1 $2 = f2
  done < file.csv 

答え3

$2はい、それ以降のすべてのフィールドを埋めると、そうすることができます$2

awk '
  BEGIN{ FS=","; OFS=";" }
  {
    for(i=3; i<=NF; i++) {
      $2 = $2","$i
    }
  }
  { print $1,$2 }
 ' data.txt

次の結果を提供します。

aa; bb, cc
dd; ee
ff; gg, hh

関連情報