在LINUX中根据Xtxt文件的第一列提取Ytxt文件第二列与之内容相符的行但是要保留Xtxt其他列的内容
可以使用awk命令来实现。
假设X.txt文件的第一列为列1,第二列为列2,第三列为列3,Y.txt文件的第一列为列A,第二列为列B,可以使用以下命令:
awk 'FNR==NR{a[$1]=$0;next}{if($2 in a) print a[$2]}' X.txt Y.txt
解释一下这个命令:
-
FNR==NR{a[$1]=$0;next}这一部分是对X.txt文件的处理。FNR是当前文件的行号,NR是所有文件的行号之和。当FNR等于NR时,说明正在处理第一个文件,即X.txt文件。这个命令将X.txt文件的每一行都存储到一个数组a中,以列1为键,整行为值。next表示跳过后续命令,继续读取下一行。 -
{if($2 in a) print a[$2]}这一部分是对Y.txt文件的处理。如果Y.txt文件的第二列在数组a中出现过,即与X.txt文件的第一列匹配成功,就输出对应的整行。因为数组a中存储的是整行,所以可以直接输出。
这样就可以提取出Y.txt文件中与X.txt文件第一列匹配的行,并保留X.txt其他列的内容。
原文地址: https://www.cveoy.top/t/topic/gPAx 著作权归作者所有。请勿转载和采集!