Сравните два файла по первому столбцу

Использование sedиprintf:

$ sed "s/INTCCADVAN/$(printf '%-10s' XXXX)/" file
ACCXXXX      CESC
ACCXXXX      CESE
ACCXXXX      CESW

Вывод printfимеет длину 10 символов, а XXXXвыравнивается по левому краю с использованием параметра форматирования -.

1
25.05.2021, 14:19
2 ответа
$ awk 'NR==FNR{a[$1]; next} FNR==1 || !($1 in a)' file2 file1
ID      firstname        lastname
4       Brenda           Something
  • NR==FNR{a[$1]; next}Используйте первый столбец из file2для построения ключей массива.
    • NRотслеживает общее количество прочитанных записей, FNRимеет номер записи только для текущего читаемого файла. Таким образом, NR==FNRверно только для первого файла (, если он не пустой)
  • FNR==1 || !($1 in a)для файла file1вывести строку заголовка или если первый столбец не найден в массивеa
  • Используйте awk -F'\t' '...', если ввод разделен табуляцией, и awk -F, '...', если он разделен запятой.

Если первый файл может быть пустым, используйте это:

awk '!f{a[$1]; next} FNR==1 || !($1 in a)' file2 f=1 file1

Это установит флаг fмежду двумя файлами.

3
28.07.2021, 11:29

В командной строке bash вы можете сделать следующее. Отфильтруйте идентификаторы из файла2 и найдите их в файле1, но только в начале строки :

.
$ grep -vf <(< file2 tail -n+2 | grep -Eo '^[^ ]{1,}'|sed 's/.*/^& /') file1
ID      firstname        lastname
4       Brenda           Something
0
28.07.2021, 11:29

Теги

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