カンマで区切られた列の範囲を印刷し、残りはカンマで区切られません。

カンマで区切られた列の範囲を印刷し、残りはカンマで区切られません。

私はこの問題を解決しようとしています。

awk '{print $1","$10","$11","$12","$13,$14,$15,$16,$17,$18,$19}' <<< "$PASTE_1" > test.csv

$ 1 $ 10 $ 11 $ 12をカンマで区切って印刷し、その行までコンマを区切ることなく$ 13を印刷し続ける必要があります。 13ドルから始まる空白が多いからです。

答え1

あなたが言うのはこれです:

awk '{a = ""; for (i = 13 ; i <= NF ; i++) a = a $i; 
       print $1 "," $10 "," $11 "," $12 "," a}'

入力する

a b c d e f g h i j k l m n o p q r s t u v w x y z

以下を提供します。

a,j,k,l,mnopqrstuvwxyz

すなわち、13から始まるフィールドが互いに接続され、1、10、11、12の後に印刷される。

答え2

1つの方法は次のとおりです。

awk -v OFS=, '{print $1, $10, $11, $12, ($13 $14 $15 $16 $17 $18 $19) }'

答え3

perl -lane 'print join(",", @F[0,9..11], q//), @F[12..$#F]'

説明する

  1. 配列は@Fフィールドを連続して保持します。 @F 配列の要素を@F[...]参照します。sliceまあ、@F[0,9..11]@Fの最初の10〜12番目の要素で構成されるスライスです。その後、joinそれらを結合し、スライスの後に空の空の要素を追加して、最後の要素を保存しcommaて別の要素を作成します。要素のidxは13番目の要素を収集します。配列の最後の要素までの要素です。 (配列インデックス付けは0から始まります。)q//,sliceslice @F[12..$#F]@F$#FPerl
  2. これで、さまざまなパラメータがprint=(デフォルトはnull)に関連付けられます。OFS$,

関連情報