2016-05-13 104 views
0

我运行一些生成ip地址作为输出的命令。但我正在开发一个工作流程,我需要两次写入IP地址。以下是示例命令及其输出。如何将命令的输出两次写入文件

$ some command >> out.txt 

$ cat out.txt 
10.241.1.85 
hdfs://10.241.1.236/ 
hdfs://10.241.1.237/ 

我想要的是复制输出,它应该看起来像这样。

10.241.1.85 
hdfs://10.241.1.236/ 
hdfs://10.241.1.237/ 
10.241.1.85 
hdfs://10.241.1.236/ 
hdfs://10.241.1.237/ 

请帮忙吗?

+2

尝试'var = $(某些cmd); echo -e“$ var \ n $ var”'。 –

+1

我刚刚发布,但是那说我建议你告诉更多关于需要在文件中的重复数据的工作流程..我会冒险说,它可以提高工作的单个实例data .. – Rob

+0

有些cmd是一个很大的,不能被分配给一个变量。你能告诉我一种可以在不改变文件名的情况下复制文件内容的方式吗? –

回答

0
some command | tee -a out.txt out.txt 

或者

some command | tee -a out.txt >> out.txt 

或者

some command | tee -a out.txt out.txt >/dev/null 
  1. 运行命令

  2. 管发球

  3. 启用追加方式

  4. 附加到同一个文件两次

+0

这不会重复OP想要的方式... –

1

在评论由@ott给出的解决方案似乎罚款:

var=$(some cmd); echo -e "$var\n$var". 

这不是分配命令OA varable但它将命令的输出分配给一个变量。

当你不希望这样,您可以使用tee(也许这会给一些排序的问题),或者不同的复制它:

some_command > out.txt.tmp 
cat out.txt.tmp out.txt.tmp > out.txt 
rm out.txt.tmp 

这样,你第一次得到复制的线人后的行的第一个条目。当你想输出直接双击,就可以使用

some_command | sed 'p' > out.txt 
0

生成输出到一些临时性的,然后复制临时目的地和删除临时:

some command > /tmp/out.txt; cat /tmp/out.txt /tmp/out.txt > out.txt; rm /tmp/out.txt 
0

下面是一些你可以选择玩弄。由于输出太大而无法存储在变量中,如果磁盘写入速度是瓶颈,我可能会使用临时文件teegzip

someCommand > tmp.txt && cat tmp.txt tmp.txt > out.txt && rm tmp.txt 

现在,如果磁盘读取/写入速度是一个瓶颈,您可以发球的someCommand输出重定向和管道之一通过gzip的最初阶段。

someCommand | tee >(gzip > tmp.gz) > out.txt && gunzip -c tmp.gz >> out.txt && rm tmp.gz 

此外,如果你并不需要通过一些其他的管道来处理它为out.txt和计划随机存取能力,你总是可以把它存储gzip压缩,直到你需要它。

someCommand | gzip > tmp.gz && cat tmp.gz tmp.gz > out.txt.gz && rm tmp.gz 
0

我建议这样的:

(someCommand | tee tmp.txt; cat tmp.txt) > out.txt; rm tmp.txt 

不知道有一种方法可以安全地做到这一点,而不诉诸临时文件。正如一些人所建议的,你可以将它捕获到一个变量中,但是必须小心引用,以确保空白不会被破坏,而且如果输出特别大,也可能会遇到问题。

相关问题