Grep файл с шаблоном и подсчет отдельных совпадений шаблонов в файле без изменения порядка - PullRequest
0 голосов
/ 13 апреля 2019

Мне нужно получить общее количество совпадений из input.txt в цифрах, используя слова из pattern.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

1 Ответ

0 голосов
/ 13 апреля 2019

удалить 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}'

EDIT

Вы меняли свой вопрос несколько раз, и каждый раз приходилось кардинально другой запрос. Вы должны оставить старую версию своего вопроса как есть, потому что эти радикальные изменения превращают ответы в неправильные и неуместные. Если вы хотите что-то другое, просто создайте новый пост и спросите там.

Если у вас есть несколько файлов с именем шаблона 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}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...