我需要使用pattern.txt中的数字从input.txt中获取总匹配项,它也需要在标签之间进行匹配。
这是我正在使用的代码,它可以正常工作,但是输出应该与input.txt排序相同,并且还要从最终输出中删除模式
grep -of pattern.txt input.txt | sort | uniq -c | awk '{print $2,$1}' > output.txt
pattern.txt:
sistersdrama.com
sisterssatellite.com
orientalsisters.com
input.txt:
<Model Make="www.sistersdrama.com" Displacement="1.6" HP="116" Year="2003"/>
<Model Make="sistersdrama.com="3.5" HP="298" Year="2003"/>
<Model Make="sistersdrama.com" Displacement="3.0" HP="200" Year="2011"/>
<Model Make="sistersdrama.com" Displacement="2.0" HP="257" Year="2002"/>
<Model Make="www.sisterssatellite.com" Displacement="2.5" HP="278"
Year="2002"/>
<Model Make="www.sisterssatellite.com" Displacement="3.0" HP="224"
Year="2009"/>
<Model Make="sisterssatellite.com" Displacement="1.8" HP="172"
Year="2007"/>
<Model Make="sisterssatellite.com" Displacement="2.8" HP="186"
Year="2001"/>
<Model Make="orientalsisters.com" Displacement="2.8" HP="179"
Year="2006"/>
<Model Make="orientalsisters.com" Displacement="2.8" HP="207"
Year="2013"/>
<Model Make="orientalsisters.com" Displacement="2.8" HP="246"
Year="2008"/>
<Model Make="orientalsisters.com" Displacement="2.8" HP="244"
Year="1999"/>
<Model Name="orientalsisters.com" Displacement="2.8" HP="244"
Year="1999"/>
使用的代码我得到了output.txt:
orientalsisters.com 4
sistersdrama.com 3
sisterssatellite.com 2
预期结果与pattern.txt的顺序相同,只有数字并减去2:
1
0
2
答案 0 :(得分:0)
删除sort
,并将awk
从'{print $2,$1}'
更改为'{print $1}'
grep -of pattern.txt input.txt | uniq -c | awk '{print $1}'
如果您想从每个结果中减去2,则为
grep -of pattern.txt input.txt | uniq -c | awk '{print $1-2}'
编辑
您已经多次更改了您的问题,并且每次都提出了根本不同的请求。您应该按原样保留问题的旧版本,因为这些根本性的变化会使答案也变得不正确且无关紧要。如果您想要其他内容,只需在此处创建新帖子并询问。
如果您有多个名称模式为input * .txt的文件(例如,input_1.txt input_2.txt input(无论如何).txt),这应该可以:
cat pattern.txt |sed s/\\./\\\\\\\\./g|xargs -I {} grep -o "$(echo "Make=\"{}\"\|Make Model=\"{}\"")" input*.txt | sed -r -e 's/.*=\"(.*)\"/ \1 /g' > temp_agg.txt && cat pattern.txt|sed s/\\./\\\\\\\\./g | xargs -I {} grep -o {} temp_agg.txt | uniq -c | awk '{print $1-2}'