保留文件 1 的标题并将文件 2 的列添加到文件 1

保留文件 1 的标题并将文件 2 的列添加到文件 1

我需要将文件 2 中的特定列复制到文件 1,同时保留文件 1 的标题。

文件1:

##header
##header
##header
A1 B1 C1
A2 B2 C2

文件2:

D1 E1 F1
D2 E2 F2

新文件:

##header
##header
##header
A1 B1 C1 E1
A2 B2 C2 E2

我的尝试:

awk -F '\t' 'NR==3; NR>3 {getline f1 <"file1" ;print f1,$2}' OFS='\t' file2> newfile

或者

awk 'NR==3; NR>3 {print $2}' < file2 | paste file1 -> newfile

有人能帮我一下吗?谢谢。

答案1

假设 File1 和 File2 最初都是制表符分隔的,您可以执行以下操作:

$ awk -F'\t' 'NR>3 {x = $0; $0 = (getline < "File2") > 0 ? x FS $2 : x} 1' File1
##header
##header
##header
A1      B1      C1      E1
A2      B2      C2      E2

检查的返回值是一种很好的做法——在这种情况下,它可以防止在结束之前用尽数据的情况下getline附加“错误” 。$2File2File1

答案2

您也可以使用coreutils,例如:

{
  # Extract the header from file1
  head -n3 file1
  
  # Combine file1 without the header with column 2 of file2
  paste <(tail -n+4 file1) <(cut -f2 file2)
} > newfile

答案3

在 bash 中

exec 7<"File2"
i=0
while read -r line
do
    ((i++))
    if (($i > 3))
    then
        read -r f1 f2 f3 <&7
        echo "$line $f2"
    else
        echo "$line"
    fi
done <"File1"
exec 7<&-

相关内容