合并文件并插入新线在文件之间合并文件并插入新线在文件之间(Concatenating Files A

2019-05-13 10:08发布

我有我想要使用Concat的多个文件cat 。 比方说,

File1.txt 
foo

File2.txt
bar

File3.txt
qux

我想Concat的,以使最终文件的样子:

foo

bar

qux

取而代之的是与平常cat File*.txt > finalfile.txt

foo
bar 
qux

什么是应该做的正确方法?

Answer 1:

你可以做:

for f in *.txt; do (cat "${f}"; echo) >> finalfile.txt; done

确保文件finalfile.txt你运行上面的命令之前不存在。

如果你被允许使用awk ,你可以这样做:

awk 'FNR==1{print ""}1' *.txt > finalfile.txt


Answer 2:

如果你有足够少的文件,您可以列出每一个,那么你可以使用进程替换 Bash中,将每对文件之间的换行符:

cat File1.txt <(echo) File2.txt <(echo) File3.txt > finalfile.txt


Answer 3:

如果是我做这件事我会使用SED:

sed -e '$s/$/\n/' -s *.txt > finalfile.txt

在这种sed的图案$有两个含义,首先它匹配只有最后行号(作为行范围应用上的图案),其次它在取代模式的线的端部相匹配。

如果你的sed的版本没有-s (过程输入单独文件),你可以做到这一切作为一个循环,但:

for f in *.txt ; do sed -e '$s/$/\n/' $f ; done > finalfile.txt


Answer 4:

那怎么我只是做了它在OSX 10.10.3

for f in *.txt; do (cat $f; echo '') >> fullData.txt; done

由于简单“回响”无PARAMS命令在没有插入新行结束了。



Answer 5:

这部作品在击:

for f in *.txt; do cat $f; echo; done

与用答案>> (附加),此命令的输出可以被管道输送到其他程序。

例子:

  • for f in File*.txt; do cat $f; echo; done > finalfile.txt
  • (for ... done) > finalfile.txt (括号是可选的)
  • for ... done | less for ... done | less (管道成更小)
  • for ... done | head -n -1 for ... done | head -n -1 (这剥掉后空白行)


Answer 6:

你可以这样做使用它xargs ,如果你喜欢,但主要的想法仍然是相同的:

find *.txt | xargs -I{} sh -c "cat {}; echo ''" > finalfile.txt


Answer 7:

在Python,这与串接文件之间的空白线( ,抑制增加一个额外的后空白行):

print '\n'.join(open(f).read() for f in filenames),

这里是丑陋的蟒蛇一衬垫可以从外壳调用,并打印输出到文件:

python -c "from sys import argv; print '\n'.join(open(f).read() for f in argv[1:])," File*.txt > finalfile.txt


文章来源: Concatenating Files And Insert New Line In Between Files
标签: linux unix cat