如何在制表符分隔文件的标题后向表中添加一行?
我的输入文件如下所示:
ID_1 ID_2 v1 C V3 V4
1878372 2253734 SAMN06396112 20481 NA DNA
1884646 2275341 SAMN06432785 20483 NA DNA
1860945 2277481 SAMN06407597 20488 NA DNA
我正在寻找以下所需的输出:
ID_1 ID_2 v1 C V3 V4
C C C B B A
1878372 2253734 SAMN06396112 20481 NA DNA
1884646 2275341 SAMN06432785 20483 NA DNA
1860945 2277481 SAMN06407597 20488 NA DNA
答案1
line=' C C C B B A'
sed -e "1a\\
$line" < input.txt
这是双引号字符串中的硬换行符。在 Bash/Ksh/Zsh 中,您可以使用
sed -e $'1a\\\n'"$line" < input.txt
如果要添加的行包含反斜杠,则需要将它们加倍以避免特殊处理。
答案2
这是一种方法awk
,使用变量作为要插入的字符串:
$ foo="C\tC\tC\tB\tB\tA"
$ awk -v s="$foo" 'NR == 2 { print s} { print }' input.txt | column -t
ID_1 ID_2 v1 C V3 V4
C C C B B A
1878372 2253734 SAMN06396112 20481 NA DNA
1884646 2275341 SAMN06432785 20483 NA DNA
1860945 2277481 SAMN06407597 20488 NA DNA
column -t
用于整理列。
答案3
假设input.txt
和line.txt
分别是输入和要添加的行。
sed -e '1r line.txt' input.txt > output.txt
直接编辑input.txt
printf "%s\n" "1r line.txt" w q | ed input.txt
答案4
使用awk
:
awk 'BEGIN{FS=OFS="\t"; str="C\tC\tC\tB\tB\tA"}NR==1{$0=$0 ORS str}1' input
FS=OFS="\t"
输入字段分隔符和输出字段分隔符设置为\t
。NR==1{$0=$0 ORS str}
在第一条记录之后添加一条新记录。$0
是当前输入记录,后跟换行符(因为默认值为ORS
is"\n"
),然后是str
我们在BEGIN
规则中创建的。1
是awk
用于打印的习语。