如何在表的特定位置添加行

如何在表的特定位置添加行

如何在制表符分隔文件的标题后向表中添加一行?

我的输入文件如下所示:

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.txtline.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是当前输入记录,后跟换行符(因为默认值为ORSis "\n"),然后是str我们在BEGIN规则中创建的。

  • 1awk用于打印的习语。

相关内容