我有一堆.txt文件需要制作成一个大文件,可以被Microsoft Excel等程序读取。
问题是文件最后没有中断,因此它们最终排成一行。
以下是我所拥有的一个例子(数字代表行号):
1. | first line of txt file
2. | second line
以下是我想将其转化为:
1. | first line of txt file
2. | second line
3. |
我在文件夹中有大约3000个这些文件,所有文件都采用相同的格式。有没有办法获取这些文件并在它们的末尾添加一个空行?我想这样做而不需要复杂的代码,即PHP等。我知道你可以使用终端做类似的事情(我在CentOS上),但是如果有什么特别需要的东西,我会'我错过了。
答案 0 :(得分:4)
实现这一目标的最简单方法是使用bash for-loop:
for file in *.txt; do
echo >> "$file"
done
这会迭代当前目录中的所有.txt
个文件,并为每个文件追加换行符。它可以写成一行,您只需要在;
之前添加done
。
请注意引用$file
来处理名称中包含空格和其他有趣字符的文件。
如果文件分布在多个目录中而不是全部在同一个目录中,则可以将*.txt
替换为**/*.txt
以迭代当前文件夹的所有子目录中的所有.txt
个文件
另一种方法是使用sed
:
sed -i "$ s:$:\n:" *.txt
-i
标志告诉sed
就地编辑文件。 $
匹配最后一行,然后s
命令用新行($
)替换行尾(再次\n
),从而附加一行文件的结尾。
答案 1 :(得分:2)
试试这个代码段:
for f in *; do ((cat $f && echo "") > $f.tmp) done && rename -f 's/\.tmp$//' *.tmp
for f in *; do
)中的任何文件。 cat $f
)上输出文件,然后输出换行符(echo ""
)> $f.tmp
)*.tmp
个文件移动到原始文件(rename -f 's/\.tmp$//' *.tmp
)。修改强> 甚至更简单:
for f in *; do (echo "" >> $f) done
for f in *; do
)中的任何文件。 echo ""
)>> $f
)