Как сравнить строки в двух файлах

Некоторые USB-устройства требуют сброса Шины USB после размонтирования USB-устройства, который сделан в Windows по умолчанию, но не в Linux.

В наше время, почти все (помимо, очевидно, Монетного двора) использование настольных сред udisk detach возможность безопасно размонтироваться и затем "разъединить" USB-устройства.

Пока Монетный двор не делает этого, можно просто сделать udisks --detach /dev/sdXX правильно разъединять Ваш MP3-плеер.

2
22.04.2015, 11:56
2 ответа

Простым решением awk (без предварительной сортировки или каких-либо внешних инструментов) может быть:

awk '
  FNR==1 { next }
  NR==FNR { a[$1] = $2 ; next }
  a[$1] != $2 { print $1, ":", $2, "does not match", a[$1] }
' file1 file2

Выход для ваших данных:

6 : strawberry does not match papaya
3 : orange does not match mango
1 : mango does not match apple
2 : papaya does not match orange
5 : straw does not match strawberry
3
27.01.2020, 21:54

Если у вас всегда одинаковое количество записей в каждом файле, и если каждый ID может быть объединен с одним и тем же в другом файле, вы можете сделать что-то подобное (это доказательство концепции, вы должны ее улучшить):

$ join -j1 <(sort -n file1.txt) <(sort -n file2.txt) | 
    awk '{if($2!=$3){k="==> BUG"}else {k=" ==> OK"}print $0,k}'

Id Value Value ==> OK
1 apple  mango ==> BUG
2 orange  papaya ==> BUG
3 mango  orange  ==> BUG
4 banana  banana ==> OK
5 strawberry straw berry ==> BUG
6 papaya strawberry  ==> BUG

Обратите внимание, что это не будет работать "как есть", если ID #4 не присутствует, например, во втором файле.

Вам следует удалить заголовки и оставить только строки BUG.

$ join -j1 <(sort -n file1.txt | tail -n+2) <(sort -n file2.txt | tail -n+2) | 
    awk '($2!=$3){print $0," ==> BUG"}'
3
27.01.2020, 21:54

Теги

Похожие вопросы