bash スクリプトを使用してテキスト ファイルを一括で折りたたむ

bash スクリプトを使用してテキスト ファイルを一括で折りたたむ

非常に単純なことをするのに苦労しています。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

関連情報