Исключение значений из N файлов на основе другого файла - PullRequest
0 голосов
/ 03 марта 2020

У меня более 50 файлов .csv в каталоге Linux, который я назову /tmp/. Мое намерение состоит в том, чтобы исключить строки из всех файлов на /tmp/, когда они соответствуют шаблонам указанного c /home/Matching.csv файла:

cat /home/Matching.csv
C
B
G

Я приведу примеры /tmp/ файлов с example_file1.csv и example_file2.csv.

cat /tmp/example_file1.csv
E,Sunday
B,Saturday
A,Wednesday
D,Tuesday
C,Friday

cat /tmp/example_file2.csv
C,January
G,December
D,August

В результате я хотел бы, чтобы файлы /tmp/ были изменены на:

cat /tmp/example_file1.csv
E,Sunday
A,Wednesday
D,Tuesday

cat /tmp/example_file2.csv
D,August

1 Ответ

0 голосов
/ 03 марта 2020
for file in /tmp/*.csv; do
    mv -- "$file" "${file}.bak"
    grep -vf /home/Matching.csv "${file}.bak" > "${file}"
    #If you want to remove original file, uncomment following line
    #rm "${file}.bak"
done

Использует шаблоны, указанные в /home/Matching.csv, как указано в опции -f. -v выбирает несовпадающие строки.

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