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