sed : 将一列添加到具有两个值的文件

sed :add a column to a file with two values

我需要向现有 tab-delimited 文件中添加一个具有列名称的列(相同的值)。 我不想创建新文件等

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

我需要一个新列,其 header Z 在所有行中仅包含一个值 2。

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

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

我的想法是 sed "1i Z" | sed "s/$/&\t2/"。但是1li当然加了一个header.

最简单:

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 版本只会将新字段写入该行,而不是一个制表符后跟新字段。