我想将 file2 的第二列与 file1 的第一列进行比较。如果它们相等,我想将 file1 的第二列添加到 file2 ,如 output.txt 所示。
file2的
chr5 ENST00000514151 utr5 0 +
chr5 ENST00000512281 utr5 0 +
chr5 ENST00000512281 utr5 0 +
chr5 ENST00000512281 utr5 0 +
文件1
ENST00000512281 a
ENST00000504031 b
ENST00000776348 c
output.txt的
chr5 a ENST00000512281 utr5 0 +
chr5 a ENST00000512281 utr5 0 +
chr5 a ENST00000512281 utr5 0 +
我能够将文件与
进行比较awk 'NR==FNR{a[$1];next}$2 in a{print}' file1 file2
这给出了以下输出:
chr5 ENST00000512281 utr5 0 +
chr5 ENST00000512281 utr5 0 +
chr5 ENST00000512281 utr5 0 +
但我不知道如何将第二列col1添加到输出中。
答案 0 :(得分:2)
您可以使用$2
将file1
中a[$1]=$2
的值存储到数组中。所以你可以试试:
awk '
NR==FNR{
a[$1]=$2 ; next }
$2 in a {
$1=$1 FS a[$2]
print
}' file1 file2
输出:
chr5 b ENST00000504031 utr5 0 +
chr5 b ENST00000504031 utr5 0 +
chr5 a ENST00000512281 utr5 0 +
chr5 a ENST00000512281 utr5 0 +
chr5 a ENST00000512281 utr5 0 +
<强>解释强>
$1
修改file2
中的$1=$1 FS a[$2]
,其中FS
是默认字段分隔符,这是一个空格..然后重建记录,这样它就可以了由print
稍后打印.. print
可以简化为1
。赞$2 in a { $1=$1 FS a[$2] }1
file2
中的记录,因此任何空格或制表符序列都将被截断为输出中的单个空格。要保留file2
中的原始格式,可以使用Gnu Awk第4版中的split()
函数。