2016-05-13 88 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 

不知道有一種方法可以安全地做到這一點,而不訴諸臨時文件。正如一些人所建議的,你可以將它捕獲到一個變量中,但是必須小心引用,以確保空白不會被破壞,而且如果輸出特別大,也可能會遇到問題。

相關問題