Сравните разделенные точкой с запятой данные в 2 файлах с помощью сценария оболочки - PullRequest
1 голос
/ 17 ноября 2009

У меня есть некоторые данные (разделенные точкой с запятой) с почти 240 строками в текстовом файле temp1. temp2.txt хранит 204 строки данных (разделенных точкой с запятой).

Я хочу:

  1. Сортировка данных в обоих файлах по field1, т. Е. Первое поле данных в каждой строке.
  2. Сравните данные в обоих файлах и перенаправьте строки, которые не равны в отдельных файлах.

Пример данных:

temp1.txt
1000xyz400100xyzA00680xyz0;19722.83;19565.7;157.13;11;2.74;11.00
1000xyz400100xyzA00682xyz0;7210.68;4111.53;3099.15;216.95;1.21;216.94
1000xyz430200xyzA00651xyz0;146.70;0.00;0.00;0.00;0.00;0.00

temp2.txt
1000xyz400100xyzA00680xyz0;19722.83;19565.7;157.13;11;2.74;11.00
1000xyz400100xyzA00682xyz0;7210.68;4111.53;3099.15;216.95;1.21;216.94

Используемая команда сортировки:

sort -k1,1 temp1 -o temp1.tmp
sort -k1,1 temp2 -o temp2.tmp

Буду признателен, если кто-нибудь покажет мне, как перенаправить только отсутствующие / несовпадающие строки в два отдельных файла для анализа.

Ответы [ 4 ]

3 голосов
/ 17 ноября 2009

Попробуйте

cat temp1 temp2 | sort -k1,1 -o tmp
# mis-matching/missing rows:
uniq -u tmp
# matching rows:
uniq -d tmp
1 голос
/ 17 ноября 2009

Вы хотите разницу, как описано в http://www.pixelbeat.org/cmdline.html#sets

sort -t';' -k1,1 temp1 temp1 temp2 | uniq -u > only_in_temp2
sort -t';' -k1,1 temp1 temp2 temp2 | uniq -u > only_in_temp1

Примечания:

  • Используйте join вместо uniq, как показано по ссылке выше, если вы хотите сравнить только определенные поля
  • Если первое поле имеет фиксированную ширину, то вам не нужен -t ';' -k1,1 парам выше
1 голос
/ 17 ноября 2009

Посмотрите на команду связи .

0 голосов
/ 17 ноября 2009

с использованием gawk и выводом строк в файле1, которых нет в файле2

awk -F";" 'FNR==NR{  a[$1]=$0;next }
( ! ( $1 in a)  ) {  print $0 > "afile.txt" }' file2 file1

поменять местами порядок файлов2 и файла в строке вывода в файле2, которого нет в файле1

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