2017-06-02 54 views
0

我想連接column2直到column4。 例(first.txt):文件中的CONCAT列

|ID|column2|column3|column4| 
|1 | a | b | c | 
|2 | d | e | f | 

對此(mynewfile.txt):

ID|column2 
1 | a b c 
2 | d e f 

這是我在Cygwin的腳本:$ awk '{print $2" "$3" "$4 }' first.txt > mynewfile.txt

當然,它不工作了那麼..我如何改進腳本?

+1

'awk'使用空格作爲缺省的字段deliimter。您需要使用'-F'選項將其更改爲使用管道作爲分隔符。 – Barmar

回答

1

您需要設置字段分隔符,以便其周圍可選空白的管道是字段分隔符。

該行開頭處的管道會在管道之前產生一個空的字段1,因此ID是字段2,而列2-4是字段3-5。因此,它應該是:

awk -F' *\\| *' 'NR == 1 {print "ID|column2|"} NR > 1 {printf("%d | %s %s %s |\n", $2, $3, $4, $5)}' first.txt > mynewfile.txt 
+0

ID列丟失 – user6308605

+0

它適用於我在OS X上。我沒有Cygwin,但我不明白爲什麼它會有任何不同。 – Barmar

+0

'column2'現在在'ID'列中。它應該與其餘的 – user6308605

0

不是特別普遍GNUsed方法:

sed 's/^[|]//;1s/2.*/2/;1!{s/|/ /g2;s/ */ /2g}' first.txt 

輸出:

ID|column2 
1 | a b c 
2 | d e f