Сравнение файлов линию за линией в awk с разделителем

Это зависит от того, что Вы подразумеваете под гарантией. 226 означает передачу, законченную без любой обнаруженной ошибки, таким образом запрещая необнаруженную ошибку при повреждении данных или сервера, отказывающего, прежде чем это сможет передать его диску от его кэша, или что-то, файлы будут идентичны.

4
13.09.2015, 01:12
3 ответа

Если я понимаю Вас правильно, Вы хотите распечатать строку от file2, если 3-е поле отличается от соответствующей записи в file1. Если так, это должно сделать это:

awk 'BEGIN{FS="|"} NR==FNR{a[$1,$2]=$3;next}(a[$1,$2]!=$3)' file1  file2

Ваш не работал, потому что Вы брали $3 как ключ для массива a и $3 не уникально (оба equator и globe присутствуют в обоих файлах).

Я согласовываю с @drewbenn это оба grep и join более просты для этого конкретного случая, но вот является Perl способом сделать то же самое:

perl -laF'\|' -ne '($k{$F[0].",".$F[1]}||=$F[2]) eq $F[2]||print;' file1  file2
5
27.01.2020, 20:46
  • 1
    Я могу использовать pkg-конфигурацию для получения флагов, но они не появляются в моем Make-файле. $pkg-config - cflags dbus-glib-1-pthread-I/usr/include/dbus-1.0-I/usr/lib/dbus-1.0/include-I/usr/include/glib-2.0-I/usr/lib/glib-2.0/include $pkg-config - освобождает dbus-glib-1-pthread-L/lib-ldbus-glib-1-ldbus-1-lpthread-lgobject-2.0-lgthread-2.0-lrt-lglib-2.0---------121-------234337----ls-l/var/lib/db2/db2inst1/sqllib/adm/db2syscr, дает мне -r-sr-s--- 1 root db2iadm1 147K Feb 1 23:32 /var/lib/db2/db2inst1/sqllib/adm/db2syscr* ---------121 большое спасибо--------44882----за Ваш ответ. Я уже установил его через виртуальную машину, как объяснено в вышеупомянутом ответе. BTW поле семени mandriva, кажется, более легкая опция. Конечно, попробует его в следующий раз, когда кажется, что $PWD оценен только в первый раз apt-get -t stable install php5-memcached Не работал: php5-memcached : Depends: libmemcached11 but it is not installable E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution). ---------121 спасибо--------138639----, но это не работало на меня. Я отодвинул папку, впоследствии перезапустил gedit, но тем не менее темой является нестандартная, а также используемые плагины являются теми, я имел в прошлый раз, когда я использую rm -f часто на clean цель в Makefiles--------121--------55005----@terdon я использую GNU grep 2.12--------121--------137117----Необходимо использовать a[$1,$2] в случае, если Вы получаете, к сожалению, подобные поля как a|bc|d и ab|c|e –  glenn jackman 23.09.2013, 16:00
  • 2
    Необходимо использовать a[$1,$2] в случае, если Вы получаете, к сожалению, подобные поля как a|bc|d и ab|c|e ---------121 положительная сторона--------115428----@glennjackman, ответ отредактирован. –  terdon♦ 23.09.2013, 16:16

Я думаю, что Вы хотите использовать join (или grep -f) вместо этого. Но если необходимо использовать awk:

echo | awk '{system("join -v 2 file1 file2")}'

который является просто фронтендом awk к join -v 2 file1 file2. Точно так же, конечно, можно использовать grep -v -f file1 file2.

5
27.01.2020, 20:46
  • 1
    join инструмент для задания, но Вашего awk решение обманывает. –  jordanm 23.09.2013, 14:20

comm реальный инструмент для этого задания:

comm -13 file1 file2
ijk|789|equator
lmn|101112|globe

Если входные файлы уже не отсортированы:

comm -13 <(sort file1) <(sort file2)
5
27.01.2020, 20:46

Теги

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