我需要使用列名添加一个列(相同的值)到已经存在的制表符分隔文件。 我不想创建新文件等。
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当然会添加一个标题。
答案 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版本只会将新字段写入行,而不是选项卡后跟新字段。