关于linux:比较两个不同列的文件并打印不同列 | 码农家园 (codenong.com)
Compare two files of different columns and print different columns
我想将file2的第二列与file1的第一列进行比较。 如果它们相等,我想将file1的第二列添加到file2中,如output.txt中所示。
文件2
1 | chr5 ENST00000514151 utr5 0 + |
文件1
1 | ENST00000512281 a |
output.txt
1 | chr5 a ENST00000512281 utr5 0 + |
我可以比较文件
1 | awk 'NR==FNR{a[$1];next}$2 in a{print}' file1 file2 |
这给出以下输出:
1 | chr5 ENST00000512281 utr5 0 + |
但是我不知道如何将file1的第二列添加到输出中。
相关讨论
您可以使用a[$1]=$2将file1中的$2值存储到数组中。 因此,您可以尝试:
1 | awk ' |
输出:
1 | chr5 b ENST00000504031 utr5 0 + |
说明:
- 这会使用$1=$1 FS a[$2]修改file2中的$1,其中FS是默认的字段分隔符,它是一个空格..然后重建记录,以便以后可以由print打印。
- 如果需要,可以将print简化为1。类似于$2 in a { $1=$1 FS a[$2] }1
- 请注意,这将重建file2中的记录,因此任何空格或制表符序列都将被截断为输出中的单个空格。 要使原始格式保持为file2,可以使用Gnu Awk版本4中的split()函数。