我需要将文件 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
附加“错误” 。$2
File2
File1
答案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<&-