cat命令合并两个* .txt和缺少的列mac osx

时间:2018-10-01 02:04:34

标签: cat

我喜欢使用cat命令在Mac osx下加入多个* .txt文件。

我的第一个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 :(得分:2)

我认为单独使用cat命令不会删除标题或标记任何缺少的列,因为它所做的只是连接文件。但是,如果您知道尽可能多的列数,则可以执行以下操作:

cat file1.txt <( tail -n+2 file2.txt ) | gawk -F';' -v OFS=';' '{NF=4}1'

其中NF = 4是最高的列数(在您的示例中为4)。 上面的命令使用子命令的输出作为输入(运算符<())将file1.txt与file2.txt的无标题版本连接起来。对于要串联的每个文件,可以多次使用<()。最终命令gawk,是从this answer改编而来的,它为您填充了列定界符。

(注意:如果找不到gawk,请使用brew install gawk; Mac OS X的awk将无法工作)

如果没有第一个标头不会打扰您,并且您不想使用cat,则可以执行以下操作:

gawk -F';' -v OFS=';' '{NF=4}1' file*.txt | egrep -v '^a;b'