Сравните два файла с awk или sed - PullRequest
2 голосов
/ 18 ноября 2011

Это должно быть легко для вас

Вот файл1 (один столбец)

1
2
3
4
5
6
7
8
9

а вот файл2 (две колонки)

2 yay
3 ups
4 wow
8 hey

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

Ответы [ 3 ]

14 голосов
/ 18 ноября 2011
 awk 'NR==FNR{a[$1]++;next;}!($0 in a)' file2 file1

или используя соединение с -v, как предложил @Michael:

join -v1 file1 file2

оба напечатают:

1
5
6
7
9
3 голосов
/ 18 ноября 2011

Вы можете сделать это, комбинируя cut и comm:

cut -d' ' -f1 file2 | comm -13 - file1

Вы также можете рассмотреть join, в зависимости от того, как вы хотите обрабатывать повторяющиеся строки.

2 голосов
/ 19 ноября 2011

Это решение Sed может работать для вас:

{ seq 1 10; echo -e "2 yay\n3 ups\n4 wow\n8 hey"; } | sort -n | 
sed '1{h;d};H;${x;s/\(\S\+\)\n\1[^\n]*\n//g;p};d'
1
5
6
7
9
10

Объяснение: Сортировать файлы по номерам, а затем с помощью sed перетащить файл в пространство удержания (HS).В конце файла своп к HS и затем удалите строки с дублирующимися ключами.

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