2017-03-23 92 views
0

我有一個文本文件,itemlist.txt,它由一個字符串列表,像這樣:如何將文件名附加到文本文件中列出的每個文本文件?

Item1 
Item2 
Item3 
Item4 
... 

每串在同一個目錄對應到一個文本文件(都具有相同的文件擴展名)的列表。換句話說,列表中的Item1在同一目錄中表示Item1.txt,等等。

什麼是使用此列表編輯每個文件,使用Bash shell腳本將每個文件的文件名追加到自身的有效方法?換句話說,「Item1」應該是Item1.txt的最後一行,等等。

我有基於GUI的工作流工具來進一步操作這些文本文件,一旦字符串到位,但我有很多東西要學關於Bash和這一直困擾着我。理想情況下,我想寫一個腳本,接受用戶定義的參數與文件名一起寫入文件,但......嬰兒步驟!

我認爲sedecho更好,在操縱文本文件方面,但我無法正確地循環瀏覽文本文件。

+0

嘗試'sed中的/.*/& TXT /。 'inputfile'或'awk'$ 0 = $ 0「.txt」'input' –

回答

2

您可以使用這個簡單的read循環:

while read -r item; do 
    file="$item.txt" 
    [[ ! -f "$file" ]] && continue # skip if file doesn't exist or if it is not a regular file 
    printf '%s\n' "$item" >> "$file" 
done < itmelist.txt 
+0

這在測試數據的一般情況下效果很好。當我將它應用於我的具體情況時,我遇到了一個問題(我認爲),因爲實際的文本文件被命名爲第2行需要看起來像'file =「$ item_foo.txt」',其中foo與整批。但是,這段代碼不起作用(我猜下劃線需要被轉義?)。如果我將「_foo」添加到文本文件中某個項目的末尾,它就會起作用。 –

+0

'file =「$ {item} _foo.txt」'會做到這一點。 – codeforester

+0

當然啦! –

3

回聲可能是最簡單的,因爲你要追加

while read f; do 
    echo "$f" >>"$f.txt" 
done <itemlist.txt 
相關問題