Answers:
尝试这个:
$ awk 'FNR==NR{a[FNR]=$2;next};{$NF=a[FNR]};1' file2 file1
A 23 8 0
A 63 9 6
B 45 3 5
paste file1 file2
,然后在中打印选定的字段awk
。
file2
在内存中,如果文件很大,可能会禁止使用。有一种更简单的方法来执行此操作,而无需占用内存(请参阅我的答案)。
有专用的工具:paste
。它将第一个文件中的每个完整行与第二个文件中的相应行连接起来;您可以在之前或之后删除不需要的列。例如,假设您的列以制表符分隔:
paste file1.txt file2.txt | cut -f 1,2,3,6
这是一种预过滤依赖于ksh / bash / zsh进程替换的两个文件的方法。
paste <(<file1.txt sed 's/[[:space:]][[:space:]]*[^[:space:]]*$//') \
<(<file1.txt sed 's/^[^[:space:]]*[[:space:]][[:space:]]*//')
Awk主要用于一次处理一个文件,但是您可以调用getline
并行读取另一个文件。
awk '
BEGIN {file2=ARGV[2]; ARGV[2]="";}
{$0 = $0 ORS getline(); print $1, $2, $3, $6;}
' file1.txt file2.txt
到目前为止,我假设您想将文件1的第1行与文件2的第1行匹配,文件1的第2行与文件2的第2行匹配,依此类推。如果要匹配列的内容,则为完全不同的事情。join
只要您要匹配的列已排序,它将完成该工作。
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt