Как удалить строки из одного файла, содержащие конкретный текст столбца в другом файле, с помощью сценария оболочки?

Ситуация: у нас есть два файла по разным путям на сервере. Один файл, то есть ФАЙЛ A, находится в папке отклонения, а другой ФАЙЛ B находится в папке архива. мы читаем ФАЙЛ A из папки отклонения и выбираем слово после текста «ITEM:», а затем ищем его в ФАЙЛЕ B. Если он найден, мне нужно удалить всю строку из ФАЙЛА B, имеющую это слово.

ВХОД:

Файл A:

hi my name is himansh agarwal.
My employee id is x56723
I live in Banaglore
I have an ITEM: WORDPRESS

ФАЙЛ B:

Hi My name is joseph.
i live in miami.
I dont go to office
I dont have an WORDPRESS.
i am very hungry.
I love to go out.

ВЫХОД:

Файл B следует переименовать в FILE B_1, а текст внутри него не должен содержать строки с текстом WORDPRESS. ФАЙЛ B:

Hi My name is joseph.
i live in miami.
I dont go to office
i am very hungry.
I love to go out.

Что ты пробовал? Как это не удалось? Можете ли вы предоставить образцы входных файлов и ожидаемый результат?

choroba 11.04.2018 13:26

пожалуйста, отредактируйте свой вопрос и добавьте информацию, он будет более читабельным, а затем удалите эти комментарии

kyodev 11.04.2018 13:46
0
2
44
1

Ответы 1

Вы можете выделить текст с помощью awk:

awk '$0 ~ /ITEM: / { sub(/^.*ITEM: /,"",$0); print $0; }' file_a

Вы можете исключить строку из файла с помощью grep -v

grep -v WORDPRESS file_b

Вы можете использовать подстановку команд, чтобы передать результат одной команды в качестве параметра второй команде:

grep -v "$(echo WORDPRESS)" file_b

Вы можете вывести результат выполнения команды в файл:

echo Test > file_b2

Это дает:

grep -v "$(awk '$0 ~ /ITEM: / { sub(/^.*ITEM: /,"",$0); print $0; }' file_a)" file_b > file_b_1

(Предполагается, что на выходе получается файл B_1, а не файл B. Последний может быть получен с помощью нескольких команд mv)

(Вы можете сделать это с пробелами в именах файлов, тогда просто везде имена файлов)

Другие вопросы по теме