Unix Shellを使用して最初のn列と最後のn列のみを表示するにはどうすればよいですか?

Unix Shellを使用して最初のn列と最後のn列のみを表示するにはどうすればよいですか?

csvファイルがたくさんあります。元のデザインには5つの列が必要でした。

私はcsvファイルの中央の列に任意の数のカンマが含まれており、正しく引用されていない文字列があることを発見しました。その結果、列数に関係なく行が生成されます。

このcsvファイルの最初の2列と最後の2列をどのように取得できますか?

カンマの数は行ごとに変更できるため、最初の2つの列と最後の2つの列を指定する方法が必要です。

ベストアンサー1

awk -F, '{print $1, $2, $(NF-1), $NF}'  < input

より一般的には、(質問のタイトルに応じて)n入力の最初の列と最後の列を印刷します。これがいくつかの列を2回印刷するという意味であることを確認せずに -

awk -v n=2 '{ 
  for(i=1; i <= n && i <= NF; i++)
      printf "%s%s", $i, OFS
    for(i=NF-n+1; i <= NF && i >= 1; i++)
      printf "%s%s", $i, OFS
    printf "%s", ORS
  }' < input

-F必要に応じて区切り記号を使用してください)

おすすめ記事