
我正在嘗試解決這個問題。
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
一種方法是:
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
將欄位保存在一行中。@F[...]
指的是slice
數組@F 的元素。那麼,@F[0,9..11]
是由 @F 的第 1 個、第 10 到 12 個元素組成的切片,然後將它們join
組合在一起,並在切片後添加comma
一個虛擬空元素,以生成即將到來的.另一個透過保存最後一個元素的 idx來收集數組的第 13 個元素,直到最後一個元素。 (請注意,數組索引是從零開始的)。q//
,
slice
slice
@F[12..$#F]
@F
$#F
Perl
- 的各種參數現在用=
print
連接在一起(預設為 null)。OFS
$,