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