команда cat объединяет два * .txt с отсутствующими столбцами Mac OSX - PullRequest
0 голосов
/ 01 октября 2018

Мне нравится использовать команду cat для объединения нескольких файлов * .txt в Mac OSX.

мой первый file1.txt выглядит так:

a;b;c;d
1;2;3;4

секунда file2.txt:

a;b
5;6
7;8

что я хочу:

a;b;c;d
1;2;3;4
5;6;;
7;8;;

мой вопрос: можно ли пропустить заголовок из второго файла в выходном файле?А как кошка справляется с отсутствующими столбцами?пишу NaNs?

может быть, эта команда сможет это сделать?

head -1 file1.txt > all.txt;
tail -n +2 -q file*.txt >> all.txt

1 Ответ

0 голосов
/ 01 октября 2018

Я не думаю, что одна команда 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'

...