我喜欢使用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
答案 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'