将一个文件中的一列与另一列进行比较,如果匹配,则追加列

将一个文件中的一列与另一列进行比较,如果匹配,则追加列

我想将一个文件中的一列与另一个文件中的另一列进行比较。如果列匹配,我想附加第一个文件中的第一列,作为第二个文件的第一列。

文件1

FID IID
456 2
123 1
789 3
112 4

文件2

IID column1 column2 column3... column464
1 Value11 Value12 etc etc ... etc
7 Value71 Value72 etc etc ... etc
2 Value21 Value22 etc etc ... etc
6 Value61 Value62 etc etc ... etc
3 Value31 Value32 etc etc ... etc

所需输出

FID IID column1 column2 column3... column464
123 1 Value11 Value12 etc etc ... etc
456 2 Value21 Value22 etc etc ... etc
789 3 Value31 Value32 etc etc ... etc

答案1

使用awk

awk 'NR==FNR { id[$2]=$1; next } ($1 in id){ print id[$1], $0}' file1 file2

在第一个操作块中,我们将 file1 读入一个名为的关联数组id其中键是列 $2,值是列 $1;关于NR==FNR处理第一个输入文件时始终为 true 的条件,即 awk 的内部环境变量和 NR (数量ecords)对每个输入进行更新,与 FNR 相同(F伊莱数量ecord),但 FNR 会为每个下一个输入文件重置。

然后在下一个操作块中,我们检查 file2 的第一列 $1 是否存在于idarray 然后打印其相应的值,id[$1]后跟 file2 的整行 $0。

答案2

对于有限数量的字段,请尝试

join -12 -21 -o1.1,0,2.2,2.3,2.4  <(sort -nk2,2 file1) <(sort -n file2) 2>/dev/null
FID IID column1 column2 column3...
123 1 Value11 Value12 etc
456 2 Value21 Value22 etc
789 3 Value31 Value32 etc

但由于您提到的字段数量,格式可能会变得有些麻烦。

相关内容