文件中的CONCAT列

时间:2017-06-02 01:30:09

标签: bash shell cygwin

我希望将column2连接到column4。 示例(first.txt):

|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

当然,它运作得不好..如何改进脚本?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

不是特别通用的 GNU sed方法:

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

输出:

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