我很难做一些非常简单的事情。我有大约 2000 个由一行数字组成的 .txt 文件。我想使用 fold 命令将单行折叠成一列,其中包含多行,然后用这个新的折叠版本覆盖原始文件。我的尝试:
#!/bin/bash
for i in *.txt ; do
fold -w 1 $file > $file
done
不起作用。有帮助吗?谢谢。
答案1
这里有两个问题。首先,您声明了变量“i”,但使用了不存在的“$file”。即使它存在,第二个问题是 bash 读取“从左到右”。这意味着它将首先看到“>$file”,并将覆盖文件的内容。因此,如果您使用正确的变量,您将丢失数据。
所以,一个错误拯救了你,你真幸运,真幸运 :)
尝试以下方法:
for i in *.txt ; do fold -w 1 $i > sillytmpfile; mv sillytmpfile $i; done
答案2
sed
也可能是一个选择,它在内部处理临时文件问题:
for i in *.txt ; do
sed -i 's#.#&\n#g' $file
done