在LINUX中根据Xtxt文件的第一列提取Ytxt文件第二列与之内容相符的行但是要保留Xtxt其他列的内容输出几个方法
方法一:使用awk命令
命令如下:
awk 'FNR==NR{a[$1]=$0;next}{if($2 in a) print a[$2]}' X.txt Y.txt
解释:
- FNR==NR表示对第一个文件(即X.txt)进行操作。
 - a[$1]=$0表示将X.txt文件的每一行以第一列为键,整行为值存储到数组a中。
 - next表示跳过对Y.txt文件的操作,直接开始下一次循环。
 - 如果Y.txt文件的第二列在数组a中出现过,则输出对应的X.txt文件的那一行。
 
方法二:使用grep命令和cut命令
命令如下:
grep -f <(cut -d ' ' -f 1 X.txt) Y.txt
解释:
- cut -d ' ' -f 1 X.txt表示以空格作为分隔符,提取X.txt文件的第一列。
 - <(cut -d ' ' -f 1 X.txt)表示将cut命令的输出作为grep命令的输入。
 - -f选项表示指定匹配模式,-f 1表示匹配第一列。
 - Y.txt表示要从中提取内容的文件。
 
方法三:使用join命令
命令如下:
join -1 1 -2 2 <(sort -k1 X.txt) <(sort -k2 Y.txt)
解释:
- sort -k1 X.txt和sort -k2 Y.txt表示将X.txt和Y.txt文件按照第一列和第二列进行排序。
 - <(sort -k1 X.txt)和<(sort -k2 Y.txt)表示将排序后的输出作为join命令的输入。
 - -1 1和-2 2表示指定X.txt文件的第一列和Y.txt文件的第二列为连接键。
 - 如果X.txt文件的第一列与Y.txt文件的第二列相同,则将两个文件的内容连接起来输出
 
原文地址: https://www.cveoy.top/t/topic/gPC1 著作权归作者所有。请勿转载和采集!