2015-05-27 35 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已经给出的解决方案要差得多。 –

相关问题