sed:向具有两个值的文件添加列

时间:2015-03-17 17:05:54

标签: sed

我需要使用列名添加一个列(相同的值)到已经存在的制表符分隔文件。 我不想创建新文件等。

A B C D
1 1 1 1
1 1 1 1

我需要一个新的列,其标题Z在所有行中只包含一个值。

A B C D Z
1 5 1 2 2
0 6 1 0 2

我怎样才能用sed做到这一点?

我的想法是sed "1i Z" | sed "s/$/&\t2/"。但是1li当然会添加一个标题。

1 个答案:

答案 0 :(得分:3)

最简单:

sed '1 s/$/\tZ/; 1! s/$/\t2/' filename

由于数据是严格按制表符分隔的,我也可以通过awk看到这一点:

awk -F '\t' 'BEGIN { OFS = FS } NR == 1 { $(NF + 1) = "Z" } NR > 1 { $(NF + 1) = 2 } 1' filename

有人可能会说这在概念上更清晰。最后,两者都做了同样的事情。 1

1 除非有空行,在这种情况下,awk版本只会将新字段写入行,而不是选项卡后跟新字段。