Shell 比较两个文件,打印第二个文件中不变的第一个单词

Shell 比较两个文件,打印第二个文件中不变的第一个单词,shell,Shell,我有文件a,内容如下: 12345:$gfdgfgfgfgfgfgfdgdgfgfdgfdg/:17436:0:99999:7::: 67890:$kjhwhkjhwekjrhwkejhwkjehkjl/:17433:0:99999:7::: 14567:$aaaaaaaaaaaaaaaaaaaaaaaaaaa/:17437:0:99999:7::: 我有文件b,内容如下 12345:$gfdgfgfgfgfgfgfdgdgfgfdgfdg/:17436:0:99999:7::: 14567:

我有文件a,内容如下:

12345:$gfdgfgfgfgfgfgfdgdgfgfdgfdg/:17436:0:99999:7:::
67890:$kjhwhkjhwekjrhwkejhwkjehkjl/:17433:0:99999:7:::
14567:$aaaaaaaaaaaaaaaaaaaaaaaaaaa/:17437:0:99999:7:::
我有文件b,内容如下

12345:$gfdgfgfgfgfgfgfdgdgfgfdgfdg/:17436:0:99999:7:::
14567:$bbbbbbbbbbbbbbbbbbbbbbbbbbb/:17437:0:99999:7:::
67890:$ccccccccccccccccccccccccccc/:17433:0:99999:7:::
我想比较文件A文件B。如果fileB中的任何行与fileA相比没有变化,那么我想打印该行的第一个字

因此,根据我上面给出的示例,输出应该如下所示

12345
我用
diff
comm
试试运气。但是,fileB中的行的显示顺序可能与fileA中的行不同


任何帮助都将不胜感激。

此awk one liner将完成以下工作:

grep -f fileA fileB | awk -F: '{print $1}'
awk -F':' 'NR==FNR{a[$0]=1;next}a[$0]{print $1}' fileA fileB

此awk一衬板应能完成以下工作:

awk -F':' 'NR==FNR{a[$0]=1;next}a[$0]{print $1}' fileA fileB

这是如何处理文件顺序的?如果fileA中的内容具有
*
?由于OP没有显示此类数据,我省略了这些情况。但是你是对的,该方法不能在FileA中为regex采用特殊字符。这如何处理文件的顺序?如果FileA中的内容有
*
?由于OP没有显示此类数据,我省略了这些情况。但是您是对的,该方法不能在FileA中为regex采用特殊字符。