2014-03-27 18 views
1

如何從管道中獲取特定行,然後在末尾回顯它們。爲了說明我的意思 - 我已經通過管道發送和proccesing這樣如何在bash shell中選擇特定行和回顯結尾

#!bin/bash 
while read line; do 
echo "$line" 
done 

我有這個輸入

foo1 -> long 
foo1 -> hell 
foo1 -> fail 
foo1 
fast1 -> fine 
fast1 -> good 
fast1 

我需要這樣做

foo1 -> long 
foo1 -> hell 
foo1 -> fail 
fast1 -> fine 
fast1 -> good 
fast1 
foo1 

只是一個例子幾行 - 將有更長的輸入處理

+0

您需要能夠將不喜歡的行存儲到數組或其他東西中,然後在最後遍歷該結構。這可能是一個有用的起點:http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_02.html – mattwise

回答

1

您可以使用BASH數組來存儲某些行以後再打印:

lines=() 
while read line; do 
if [[ $someCondition ]]; then 
    lines+=("$line") 
else 
    echo "$line" 
fi 
done 

# print array now: 
printf "%s\n" "${lines[@]}" 
+0

這樣做的問題是,完成後關閉管道,以便數組 - 行 - 不再存在 - 它的空 – Croolman

+0

這取決於您是否在while循環中使用管道並在子外殼中處理它。您可以使用流程替換避免創建子shell。 – anubhava

+0

哦,是的,現在它的工作。還有一個問題。進程替換 - uniq -u> tmp - 創建類似文件的東西嗎?因爲我不得不創建任何文件。非常感謝你。 – Croolman

相關問題