我有多个文件要与cat连接。
cat
File1.txt foo File2.txt bar File3.txt qux
我想concat使最终文件看起来像:
foo bar qux
而不是用通常的cat File*.txt > finalfile.txt
cat File*.txt > finalfile.txt
正确的做法是什么?
tag5nh1u1#
您可以执行:
for f in *.txt; do (cat "${f}"; echo) >> finalfile.txt; done
在运行上述命令之前,请确保文件finalfile.txt不存在。如果允许使用awk,则可以执行以下操作:
finalfile.txt
awk
awk 'FNR==1{print ""}1' *.txt > finalfile.txt
dhxwm5r42#
如果你有足够多的文件可以列出每一个,那么你可以在Bash中使用process substitution,在每对文件之间插入一个换行符:
cat File1.txt <(echo) File2.txt <(echo) File3.txt > finalfile.txt
mm9b1k5b3#
如果是我,我会使用sed:
sed -e '$s/$/\n/' -s *.txt > finalfile.txt
在这个sed模式中,$有两个含义,首先它只匹配最后一行的行号(作为要应用模式的行的范围),其次它匹配替换模式中的行尾。如果您的sed版本没有-s(单独处理输入文件),您可以将其全部作为一个循环来执行:
-s
for f in *.txt ; do sed -e '$s/$/\n/' $f ; done > finalfile.txt
juzqafwq4#
这在Bash中有效:
for f in *.txt; do cat $f; echo; done
与使用>>(append)的回答不同,此命令的输出可以通过管道传输到其他程序。示例:
>>
for f in File*.txt; do cat $f; echo; done > finalfile.txt
(for ... done) > finalfile.txt
for ... done | less
for ... done | head -n -1
ltqd579y5#
如果愿意,可以使用xargs来实现,但主要思想还是一样的:
xargs
find *.txt | xargs -I{} sh -c "cat {}; echo ''" > finalfile.txt
qvk1mo1f6#
这就是我刚刚在OsX 10.10.3上所做的
for f in *.txt; do (cat $f; echo '') >> fullData.txt; done
因为不带参数的简单“echo”命令最终没有插入新行。
qgzx9mmu7#
在python中,这与文件之间的空行连接(,禁止添加额外的尾随空行):
,
print '\n'.join(open(f).read() for f in filenames),
下面是可以从shell调用并将输出打印到文件的丑陋的python一行程序:
python -c "from sys import argv; print '\n'.join(open(f).read() for f in argv[1:])," File*.txt > finalfile.txt
utugiqy68#
您可以使用grep,其中-h不回显文件名
grep
-h
grep -h "" File*.txt
将给予:
8条答案
按热度按时间tag5nh1u1#
您可以执行:
在运行上述命令之前,请确保文件
finalfile.txt
不存在。如果允许使用
awk
,则可以执行以下操作:dhxwm5r42#
如果你有足够多的文件可以列出每一个,那么你可以在Bash中使用process substitution,在每对文件之间插入一个换行符:
mm9b1k5b3#
如果是我,我会使用sed:
在这个sed模式中,$有两个含义,首先它只匹配最后一行的行号(作为要应用模式的行的范围),其次它匹配替换模式中的行尾。
如果您的sed版本没有
-s
(单独处理输入文件),您可以将其全部作为一个循环来执行:juzqafwq4#
这在Bash中有效:
与使用
>>
(append)的回答不同,此命令的输出可以通过管道传输到其他程序。示例:
for f in File*.txt; do cat $f; echo; done > finalfile.txt
个(for ... done) > finalfile.txt
(括号是可选的)for ... done | less
(管道进入更少)for ... done | head -n -1
(这会去除尾端空白行)ltqd579y5#
如果愿意,可以使用
xargs
来实现,但主要思想还是一样的:qvk1mo1f6#
这就是我刚刚在OsX 10.10.3上所做的
因为不带参数的简单“echo”命令最终没有插入新行。
qgzx9mmu7#
在python中,这与文件之间的空行连接(
,
禁止添加额外的尾随空行):下面是可以从shell调用并将输出打印到文件的丑陋的python一行程序:
utugiqy68#
您可以使用
grep
,其中-h
不回显文件名将给予: