我试图做匹配和不匹配练习..我尝试尝试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
newfile 1:
cat
green_apple
red_bean
red_pepper
ginger
然后我申请了:
grep -Fxvf newfile1 file2
我得到了我想要的输出。
我只是想知道是否有其他方法只使用没有TCL regsub进程的grep命令。我确实尝试过awk,comm和grep。它只匹配整行匹配100%。
谢谢。
答案 0 :(得分: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
答案 1 :(得分: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
我希望我清楚地理解你的问题。如果您需要其他东西,请在下面评论。