2015-05-27 38 views
0

我在寫一個腳本來將數據寫入文件。腳本是附加到linux/unix中的文件而不是覆蓋

for i in {1..10..2} 
do 
    echo $i > tot.txt 
done 

但是每次tot.txt被覆蓋。如何追加而不覆蓋?謝謝

+1

改爲使用'printf'%s \ n'{1..10..2}> tot.txt'。 –

+0

@TomFenech如果你打算這麼做,爲什麼不使用'seq'? –

+1

'seq'有什麼了不起的?這是一個獨立的過程,與內置操作相反,完全不是標準。如果你使用bash(大概是OP),那麼我的建議是完全有效的。它還帶有額外的好處,您可以自定義每行的格式:) –

回答

3

您需要使用done後重定向一次:

for i in {1..10..2} 
do 
    echo $i 
done > tot.txt 

cat tot.txt 
1 
3 
5 
7 
9 

PS:如果你已經在tot.txt一些內容,那麼你可以done後使用>> tot.txt

+0

不要挑剔,但這個答案在技術上並不*附加*到文件中。它只是捕獲'for.. done'塊的所有輸出,並用它覆蓋'tot.txt'。 –

+1

這是對的,但它確實是OP試圖實現的目標。如果OP在'tot.txt'中已經有一些內容,那麼在'done'之後OP可以使用'>> tot.txt'。 – anubhava

+0

這很好,但我想輸出製表符分隔像1 3 5 7等,你可以建議編輯。謝謝 – Ssank

1

使用>>代替>追加到文件末尾。

+1

這有效,但將其放入循環內效率非常低 - 每次它想要將文件追加到其中時,它都會重新打開該文件。 –

+1

@ CharlesDuffy-我同意你的意見,但是,只是提供了一個快速解決方案。 anubhava已經給出了最好的解決方案。 –

0
for i in {1..10..2} 
    do 
      echo $i >> tot.txt 
    done 
+0

不必要的低效率,因爲它在每次迭代中重新打開文件一次。因此,這比anubhava已經給出的解決方案要差得多。 –

相關問題