列印以逗號分隔的列範圍,其餘部分不以逗號分隔

列印以逗號分隔的列範圍,其餘部分不以逗號分隔

我正在嘗試解決這個問題。

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]'

解釋

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

相關內容