cat 命令合并两个缺少列的 *.txt mac osx
cat command merging two *.txt with missing columns mac osx
我喜欢用cat
命令在macosx下加入几个*.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;;
我的问题:我可以跳过输出文件中第二个文件的 header 吗?猫如何处理缺失的列?写 NaN?
也许这个命令可以做到?
head -1 file1.txt > all.txt;
tail -n +2 -q file*.txt >> all.txt
我认为单独使用 cat
命令不会处理删除 header 或标记任何缺失的列,因为它所做的只是连接文件。但是如果你知道最大可能的列数,你可以这样做:
cat file1.txt <( tail -n+2 file2.txt ) | gawk -F';' -v OFS=';' '{NF=4}1'
其中 NF=4 是最大列数(在您的示例中为 4)。
上面的命令将 file1.txt 与 file2.txt 的 header-less 版本连接起来,使用子命令的输出作为输入(运算符 <( ) )。对于要连接的每个文件,您可以根据需要多次使用 <( )。最后一个命令 gawk 改编自 this answer),它会为您填充列分隔符。
(注意:如果找不到 gawk,请使用 brew install gawk
;Mac OS X 的 awk 将不起作用)
如果没有第一个 header 不会打扰你并且你不想使用猫,你可以这样做:
gawk -F';' -v OFS=';' '{NF=4}1' file*.txt | egrep -v '^a;b'
我喜欢用cat
命令在macosx下加入几个*.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;;
我的问题:我可以跳过输出文件中第二个文件的 header 吗?猫如何处理缺失的列?写 NaN?
也许这个命令可以做到?
head -1 file1.txt > all.txt;
tail -n +2 -q file*.txt >> all.txt
我认为单独使用 cat
命令不会处理删除 header 或标记任何缺失的列,因为它所做的只是连接文件。但是如果你知道最大可能的列数,你可以这样做:
cat file1.txt <( tail -n+2 file2.txt ) | gawk -F';' -v OFS=';' '{NF=4}1'
其中 NF=4 是最大列数(在您的示例中为 4)。 上面的命令将 file1.txt 与 file2.txt 的 header-less 版本连接起来,使用子命令的输出作为输入(运算符 <( ) )。对于要连接的每个文件,您可以根据需要多次使用 <( )。最后一个命令 gawk 改编自 this answer),它会为您填充列分隔符。
(注意:如果找不到 gawk,请使用 brew install gawk
;Mac OS X 的 awk 将不起作用)
如果没有第一个 header 不会打扰你并且你不想使用猫,你可以这样做:
gawk -F';' -v OFS=';' '{NF=4}1' file*.txt | egrep -v '^a;b'