Я не думаю, что одна команда cat
будет иметь дело с удалением заголовков или пометкой любых пропущенных столбцов, поскольку все, что она делает - это объединяет файлы.Но если вы знаете максимально возможное количество столбцов, вы можете сделать что-то вроде этого:
cat file1.txt <( tail -n+2 file2.txt ) | gawk -F';' -v OFS=';' '{NF=4}1'
Где NF = 4 - наибольшее количество столбцов (в вашем примере 4),Приведенная выше команда объединяет file1.txt с версией file2.txt без заголовка, используя в качестве входных данных вывод подкоманды (operator <()).Вы можете использовать <() столько раз, сколько хотите для каждого файла, который хотите объединить.Последняя команда, gawk, была адаптирована из <a href="https://stackoverflow.com/questions/29644056/pad-fill-missing-columns-in-csv-file-using-tabs#29644272"> этого ответа ), и она добавляет для вас разделители столбцов.
(примечание: используйте brew install gawk
, если gawk не найден; Mac OSAwk у X не будет работать)
Если отсутствие первого заголовка вас не беспокоит и вы не хотите использовать cat, вы можете сделать:
gawk -F';' -v OFS=';' '{NF=4}1' file*.txt | egrep -v '^a;b'