列の範囲をカンマ区切りで印刷し、残りはカンマ区切りなしで印刷します。

列の範囲をカンマ区切りで印刷し、残りはカンマ区切りなしで印刷します。

私はこれを理解しようとしています。

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、フィールドを 1 行に保持します。は、配列 @F の要素@F[...]の を参照しますslice。したがって、 は、@F[0,9..11]@F の 1 番目、10 番目から 12 番目の要素で構成されるスライスであり、これらはjoinによって結合されcomma、ダミーの空要素がスライスの末尾に付加されて、次の にq//必要な が生成されます。もう 1 つは、最後の要素の idx を保持する を介して、配列の 13 番目から最後の要素を収集します。( では、配列のインデックスはゼロから始まることに注意してください)。,sliceslice @F[12..$#F]@F$#FPerl
  2. のさまざまな引数が= (デフォルトは null)printで結合されるようになりました。OFS$,

関連情報