2016-04-13 3 views
2

У меня есть CSV-файл (list.csv), которым содержать что-то вроде этого:Удалить каждую строку, содержащую идентификатор из другого файла

"1","10","1","2" 
"2","22","20","2" 
"3","33","5","2" 
"4","36","225","2" 
"5","36","225","2" 

У меня есть другой файл (delete.txt):

"1" 
"4" 

Я хочу удалить каждую строку, содержащую ID из файла delete.txt. В моем примере я хочу показать:

"2","22","20","2" 
"3","33","5","2" 
"5","36","225","2" 

Как я могу это сделать? Спасибо :)

ответ

2

Использование Grep в один проход (вы можете добавить echo "$arg" в конце концов, если вы хотите увидеть запрос, используемый):

#!/bin/bash 
arg="" 
for i in `cat delete.txt`; do 
     if [ -n "$arg" ]; then 
       arg="$arg\|^$i" 
     else 
       arg="^$i"; 
     fi 
done; 
grep -v "$arg" input.txt 
+0

Отлично, спасибо :) – Kamiz

2

Вы можете попробовать это:

< delete.txt xargs -I % sed -i '/%/d' list.csv 

Он считывает все строки из файла delete.txt и передает команду sed для удаления.

+0

Вам не нужно '-L 1', если вы используете' -I'. – 123

+1

Вы правы @ 123. Обновлено. – SLePort

Смежные вопросы