两个文件linux

时间:2017-10-31 12:01:04

标签: linux unix centos

我需要比较一下lunix中两个文件之间的差异,我需要在firts文件test.txt这行中的交集,

AAAA BBBB CCCC DDDD

并在seconde文件test2.txt中这行

EEEE FFFF AAAA GGGG DDDD

我需要结果

AAAA DDDD

我用这个命令

comm -23 <(sort -i  /var/test.txt) <(sort -i  /var/test2.txt) > g.txt

这是结果

BBBB CCCC

我需要test和test1之间的交集任何帮助

grep采取记忆

2 个答案:

答案 0 :(得分:0)

man comm

 EXAMPLES
        comm -12 file1 file2
               Print only lines present in both file1 and file2.

所以:

$ comm -12 <(sort -i  test.txt) <(sort -i  test2.txt)
aaaa
dddd

答案 1 :(得分:0)

目前还不清楚您是否试图挑选某些数字列(例如2, 3, etc..)或者您是否尝试在两个单独的文件中找到一行中的常用词(我将后者作为您的目标) ,如果我错了,请告诉我。)

在这种情况下,您无法从任一文件中删除任何列,因为您不知道sort之后常用词将驻留在哪一列。一个列不可知的方法来细化并输出排序顺序中的常用单词,只需sort一个文件,选择,然后循环调用grep -q的已排序单词以测试单词是否存在在第二个文件中,如果是这样输出它(你可以根据需要控制行格式)

其中一个,实现这一目标的方式并不是特别好:

for i in $(printf "%s\n" | sort -i test1.txt)  ## loop over sorted test1.txt
do 
    grep -q "$i" test2.txt && echo -n "$i "    ## grep if value in test2.txt
done
echo ""

您可以将其包装在子shell中(例如(....),然后将其复制并粘贴到您的终端中(在包含文件test1.txttest2.txt的目录中),看看是否符合你的需求,例如

示例使用/输出

$ (
>     for i in $(printf "%s\n" | sort -i test1.txt)
>     do
>         grep -q "$i" test2.txt && echo -n "$i "
>     done
>     echo ""
> )
aaaa dddd

仔细看看,如果您有其他问题,请告诉我。