我在檔案中有一個逗號分隔的字串串列,如下所示: 輸入檔案sentences.txt包含:
'a1', 'b2', 'c3', 'd4'
在對上述每個字串運行腳本run_script.sh時,將獲得每個輸入的相應輸出。
輸出檔案output.txt包含:
'A1', 'B1', 'C1', 'D1'
例如,run_script.sh在單個字串上運行腳本就像:
bash run_script.sh a1 > prediction.txt
我想遍歷檔案的每個元素sentences.txt運行腳本run_script.sh并將腳本的輸出存盤在prediction.txt.
我怎樣才能撰寫一個有效的 bash 腳本來做到這一點?
我嘗試按照此處的建議閱讀檔案,但沒有得到任何輸出。
uj5u.com熱心網友回復:
聽起來像家庭作業。:)
或者可能是XY 問題...
首先,為什么會c3變成C1?這只是一個錯字嗎?
如果是這樣,那么簡單地說,將每行大寫 -
$: declare -u line; while read -r line; do echo "$line"; done < sentences.txt
'A1', 'B2', 'C3', 'D4'
declare -u line將變數宣告line為始終將其內容大寫。
while read -r line; do回圈遍歷從 STDIN 分配每個到的行line。
echo "$line"字面上只是列印(現在大寫的)值。
done < sentences.txt關閉回圈并將檔案指定為其 STDIN 的源。
更簡單(更快),
tr '[[:lower:]]' '[[:upper:]]' < sentences.txt > prediction.txt
但是,如果您應該單獨閱讀“句子”中的每個“單詞”,并且這些輸出比大寫的錯字更復雜(如果您正在做基因組作業,這很可能......)那么您需要更多復雜的決議規則。
- 你確定不能嵌入逗號嗎?
- 逗號總是后跟一個(單個?)空格字符嗎?
- 所有欄位總是單引號嗎?
- 欄位中是否有任何嵌入空間?
- 腳本是否期望在其輸入中嵌入單引號和逗號?
等等。這些事情顯然會使你的決議崩潰。
盡管如此,假設一個最簡單的情況,所有這些假設都是有效的,仍然有一些相當簡單的方法來處理它。
while read -ra words; do
for word in "${words[@]}"; do
run_script.sh "$word"
done
done < sentences.txt > prediction.txt
另一方面,如果這些引號和逗號不應該被視為資料的一部分,那么您可能會更加頭疼......
還有一些其他細節需要考慮。
bash run_script.sh a1 > prediction.txt
我想回圈遍歷檔案 sentence.txt 的每個元素,運行腳本 run_script.sh 并將腳本的輸出存盤在 prediction.txt 中。
這將每次都覆寫檔案,完成后唯一的內容就是最后一次操作的輸出。至少,您需要>>附加一些邏輯來阻止換行符,直到您到達 EOL。
你能給我們更多的作業嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/451488.html
上一篇:由兩個變陣列成一個IP
