我有两个.txt
个文件,我想检查一个文件的内容是否存在于另一个文件中。我的Book1.txt
内容是:
PATX248
PATX216
PATX203
PATX219B
PATX212
PATX248
PATX211
PATX190
PATX222
PATX241
B8025
B1003
B8063
B8032
C0999
C1035
B1011
我的InventorySheet2finaloutput.txt
是:
B8061P3 366-L4/26/2017 1
PATX-148 P3 4
1003P4 M#1N-L1/19/2017
B1011P5 330-L2/23/2017 1
B8032P3 336-L3/10/2017 1
B1011P5 329-L2/14/2017 1
PATX-60P5 279-L2/8/2017 1
PATX-70 P3 5
B1573P6 1R-R8/10/2017 1
B8025 P4 5
B8025 P5 1
1061P3 372-R4/26/2017
2078 P4M#1RR-R8/25/2017
C0999 P5 4
B8078 P4M#1N-R8/25/2017 2
C-1008 P4 1
PATX-55 P4 4
B1003P5 325-R3/3/2017 1
PATX-45P4 266-L2/14/2017 1
B8032P4 384-R4/26/2017 1
C-1035 P3 1
B8032P3 340-R3/17/2017 1
输出:
B1003P5 325-R3/3/2017 1
B8032P3 336-L3/10/2017 1
B8032P4 384-R4/26/2017 1
B8032P3 340-R3/17/2017 1
C0999 P5 4
C-1035 P3 1
B1011P5 330-L2/23/2017 1
B1011P5 329-L2/14/2017 1
我已经使用了我可以在谷歌搜索的所有解决方案,它们都被执行但没有打印结果。我尝试的解决方案是:
grep -v -F -x -f Book1.txt InventorySheet2finaloutput.txt
(试过grep所有形式的旗帜)awk 'NR == FNR {Book1[$0]++; next} ($0 in Book1)' Book1.txt InventorySheet2finaloutput.txt
awk 'NR==FNR{a[$1];next}$1 in a{print $1}' Book1.txt InventorySheet2finaloutput.txt
grep "$(cat Book1.txt)" InventorySheet2finaloutput.txt
我想查找Book1
中是否存在InventorySheet
的内容。
答案 0 :(得分:1)
哦,我现在明白了:Book1的内容应该是InventorySheet行的前缀(似乎是一个可选的连字符)。因此,在Book1中给定B1003
,我们会匹配InventorySheet中的B1003P5
行。或C1035
匹配C-1035
。
grep -Ef <(sed -E 's/^/^/; s/([[:alpha:]])([[:digit:]])/\1-?\2/' Book1) InventorySheet
使用sed从Book1文件生成扩展正则表达式,并且进程替换允许最多手动grep a&#34;伪文件名&#34;。
根据您的示例文件,输出
B1011P5 330-L2/23/2017 1
B8032P3 336-L3/10/2017 1
B1011P5 329-L2/14/2017 1
B8025 P4 5
B8025 P5 1
C0999 P5 4
B1003P5 325-R3/3/2017 1
B8032P4 384-R4/26/2017 1
C-1035 P3 1
B8032P3 340-R3/17/2017 1
在awk中,这将是
awk '
NR==FNR {book[$1]; next}
{
key=$1
gsub(/-/, "", key)
for (b in book)
if (key ~ "^"b) {print; break}
}
' Book1 InventorySheet
答案 1 :(得分:0)
最好,我可以告诉你这样做你想说的是什么,你问题中发布的预期输出是错误的:
$ cat tst.awk
{
key=$1
gsub(/[^[:alnum:]]/,"",key)
match(key,/^[[:upper:]]+[[:digit:]]+/)
key = substr(key,RSTART,RLENGTH)
}
NR==FNR { keys[key]; next }
key in keys
$ awk -f tst.awk Book1.txt Inventory.txt
B1011P5 330-L2/23/2017 1
B8032P3 336-L3/10/2017 1
B1011P5 329-L2/14/2017 1
B8025 P4 5
B8025 P5 1
C0999 P5 4
B1003P5 325-R3/3/2017 1
B8032P4 384-R4/26/2017 1
C-1035 P3 1
B8032P3 340-R3/17/2017 1