-2

我正在尝试进行匹配和不匹配练习..我确实尝试过 grep 和 diff ......但它只匹配整行......是否可以匹配文件中的行,如下所示?

如果我有 2 个文件:

文件 1:

cat_cute    
green_apple_sour    
red_bean_big    
red_pepper_three    
ginger_yellow

文件 2:

cat    
green_apple    
red_pepper    
papaya

输出:

(file1)
red_bean_big    
ginger_yellow            
(file2)    
papaya

在我发布这个问题之前,我已经成功地尝试了下面的方法。我很抱歉没有在我的第一篇文章中列出这个。我将文件 2 设置为目标匹配。对于文件 1,我使用 TCL 删除所有不需要的形容词。然后我得到新文件1

新文件 1:

cat    
green_apple    
red_bean    
red_pepper    
ginger

然后我申请了:

grep -Fxvf newfile1 file2

我得到了我想要的输出。

我只是想知道是否有其他方法可以仅使用 grep 命令而不使用 TCL regsub 进程。我确实尝试过 awk、comm 和 grep。仅当整行匹配 100% 时才匹配。

谢谢你。

4

2 回答 2

0

在 awk 中:

$ awk '
NR==FNR {                  # first file
    a[$1]                  # hash entries to a
    next                   # next record
}
{                          # second file
    for(i in a)            # for each record go thru the whole of a
        if(i~$1||$1~i) {   # see if there is a match
            delete a[i]    # del if
            next           # and skip to next record
        }                  
    b[$1]                  # else store entry to b
}
END {                      # in the end
    print "(file1)" 
    for(i in a) 
        print i            # output a and
    print "(file2)"
    for(i in b) 
        print i            # b entries
}' file1 file2
(file1)
ginger_yellow
red_bean_big
(file2)
papaya
于 2017-07-17T06:34:02.597 回答
0

我没有正确理解你的问题。顺便说一句,您可以awk轻松做到这一点。

awk -F'_' 'FILENAME=="file2.txt" {a[$1$2]=$1$2} FILENAME=="file1.txt" {if(!(a[$1] || a[$1$2])) {print}}' file2.txt file1.txt

它将打印:

red_bean_big    
ginger_yellow

对于 File2 您可以颠倒顺序(稍作更改)。

awk -F'_' 'FILENAME=="file1.txt" {a[$1]=$1} FILENAME=="file2.txt" {if(!(a[$1])) {print}}' file1.txt file2.txt

上面的命令将打印:

papaya

我希望我清楚地理解了你的问题。如果您需要其他内容,请在下方评论。

于 2017-07-17T06:50:31.423 回答