Подходим два файла и сохраняем дубликаты - PullRequest
1 голос
/ 07 октября 2019

файл 1

pears
oranges
apples
pear
pears
pears
apples
apples
grapes
grapes
straw

файл 2

apples
pear
grapes
straw

Что мне нужно, чтобы сравнить файл 1 к 2 и получить совпадения. Если это дубликат, включите это также.

То, что я пробовал

grep -f file 1 file 2

Что дает мне

apples
pear
grapes
straw

Но я хотел бы также включить отображение дубликатов в файл 2

 apples
 apples 
 apples
 pear
 grapes
 grapes
 straw 

Ответы [ 3 ]

2 голосов
/ 07 октября 2019

Вы соответствуете фиксированным строкам и хотите соответствовать всей строке, поэтому добавьте опции -F и -x в grep.

Все, что вам нужно сделать, это установить file2 в качестве шаблонафайл:

grep -Fxf file2 file1
2 голосов
/ 07 октября 2019

Если вы измените порядок файлов в grep, он даст вам нужные записи, но в исходном порядке, также добавит правильные параметры.

$ grep -xFf file2 file1

apples
pear
apples
apples
grapes
grapes
straw

Однако, если вы хотите, чтобы они были в порядке file2,awk является лучшим решением.

Вот одно решение без awk

$ join -2 2 <(sort file1) <(nl file2 | sort -k2) | sort -k2n | cut -d' ' -f1

apples
apples
apples
pear
grapes
grapes
straw
2 голосов
/ 07 октября 2019

Не могли бы вы попробовать следующее.

awk 'FNR==NR{a[$0]=(a[$0]?a[$0] ORS:"")$0;next} ($0 in a){print a[$0]}' Input_file1  Input_file2

Объяснение: Добавление пояснения к вышеуказанному коду.

awk '                                   ##Starting awk program here.
FNR==NR{                                ##Checking condition FNR==NR which will be TRUE when Input_file1 is being read.
  a[$0]=(a[$0]?a[$0] ORS:"")$0          ##Creating an array named a whose index is $0 and its keep concatenating its own values with new line and current line value.
  next                                  ##next will skip all further statements from here.
}                                       ##Closing BLOCK for FNR==NR condition here.
($0 in a){                              ##Checking condition if $0 is present in array a then do following.
  print a[$0]                           ##Printing array a value whose index is $0.
}
' Input_file1  Input_file2              ##Mentioning Input_file names here.

Вывод будетследующим образом.

apples
apples
apples
pear
grapes
grapes
straw
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...