grep из двух переменных - PullRequest
       9

grep из двух переменных

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

Я пытаюсь удалить повторяющиеся строки списка, как этот.

LINES='opa
opa
eita
eita
argh'

DUPLICATE='opa
eita'

Вывод, который я ищу, - argh. До сих пор это то, что я пытался:

echo -e "$DUPLICATE" | grep --invert-match -Ff- <(echo -e "$LINES")

И:

grep --invert-match -Ff- <(echo -e "$DUPLICATE") <(echo -e "$LINES")

Но безуспешно.

Я знаю, что могу добиться этого, если я поставлю содержаниеиз $LINES в файл:

echo -e "$DUPLICATE" | grep --invert-match -Ff- FILE

Но я хотел бы знать, возможно ли это только с переменными.

Ответы [ 2 ]

1 голос
/ 31 октября 2019

другой подход, который не требует создания дублирующего списка отдельно,

$ awk '{a[$0]++} END{for(k in a) if(a[k]==1) print k}' <<< "$LINES"

подсчитывает вхождение каждой строки, печатать только в том случае, если она не дублируется (count == 1).

1 голос
/ 30 октября 2019

Передача тире в качестве имени файла для -f означает «чтение из стандартного ввода». Избавьтесь от него, чтобы имя файла, присвоенное -f, было подстановкой процесса.

Нет необходимости в echo -e, а -v короче и встречается чаще, чем --invert-match.

echo "$LINES" | grep -vFf <(echo "$DUPLICATE")

Эквивалентно, используя следующую строку:

grep -vFf <(echo "$DUPLICATE") <<< "$LINES"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...