使用 bash 腳本批次折疊文字文件

使用 bash 腳本批次折疊文字文件

我很難做一些非常簡單的事情。我有大約 2000 個 .txt 文件,它們由一行數字組成。我想使用折疊命令將單行折疊成具有多行的一列,並用這個新的折疊版本覆蓋原始文件。我的嘗試:

#!/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

相關內容