2017-06-02 9 views
0

column2column4まで連結したいと思います。 例(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 
関連する問題