非常に単純なことをするのに苦労しています。1 行の数字で構成される .txt ファイルが約 2000 個あります。fold コマンドを使用して、1 行を複数の行を含む 1 つの列に折り畳み、この新しい折り畳みバージョンで元のファイルを上書きしたいと思います。私の試みは次のとおりです。
#!/bin/bash
for i in *.txt ; do
fold -w 1 $file > $file
done
動作しません。助けてください。ありがとうございます。
答え1
ここで問題が 2 つあります。まず、変数「i」を宣言していますが、存在しない「$file」を使用しています。たとえ存在していたとしても、2 つ目の問題は、bash が「左から右」に読み取ることです。つまり、最初に「>$file」を見て、ファイルの内容を上書きします。したがって、正しい変数を使用していた場合、データが失われていたでしょう。
つまり、1 つのエラーが他のエラーからあなたを救ったのです。あなたは本当に幸運な人ですね :)
次のようなことを試してください:
for i in *.txt ; do fold -w 1 $i > sillytmpfile; mv sillytmpfile $i; done
答え2
sed
これもオプションの 1 つであり、一時ファイルの問題を内部的に処理します。
for i in *.txt ; do
sed -i 's#.#&\n#g' $file
done