Использование sed
иprintf
:
$ sed "s/INTCCADVAN/$(printf '%-10s' XXXX)/" file
ACCXXXX CESC
ACCXXXX CESE
ACCXXXX CESW
Вывод printf
имеет длину 10 символов, а XXXX
выравнивается по левому краю с использованием параметра форматирования -
.
$ 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
между двумя файлами.
В командной строке bash вы можете сделать следующее. Отфильтруйте идентификаторы из файла2 и найдите их в файле1, но только в начале строки :
.$ grep -vf <(< file2 tail -n+2 | grep -Eo '^[^ ]{1,}'|sed 's/.*/^& /') file1
ID firstname lastname
4 Brenda Something