2014-03-27 3 views
1

파이프 라인에서 특정 행을 가져 와서 끝까지 에코하려면 어떻게해야합니까? 무슨 뜻인지 보여주기 위해 - 나는 몇 줄의 파이프 라인을 통해 전송 내가bash 쉘의 끝에 특정 행과 에코를 선택하는 방법

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

난 그냥 예를 들어이

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

을 할 필요가이 입력을 가지고이

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

처럼 proccesing있다 - 처리 할 입력이 더 길어집니다.

+0

좋지 않은 줄을 배열이나 다른 것으로 저장할 수 있어야합니다. 그런 다음 끝에있는 구조를 반복하십시오. 이것은 유용한 출발점이 될 수 있습니다 : http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_02.html – mattwise

답변

1

BASH 배열을 사용하여 특정 행을 나중에 인쇄 할 rray :

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

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

이 문제는 파이프 라인을 닫은 후에 배열 - 라인 더 이상 존재하지 않습니다. - empty – Croolman

+0

while 루프에서 파이프를 사용하고 하위 쉘에서 처리 중인지 여부에 따라 달라집니다. 프로세스 대체를 사용하여 서브 쉘 작성을 피할 수 있습니다. – anubhava

+0

오, 그래, 이제 그 일. 한 가지 더 질문. 프로세스 대체 (uniq -u> tmp)가 파일과 비슷한 것을 생성합니까? 필자는 어떤 파일도 만들 수 없기 때문에. 고맙습니다. – Croolman

관련 문제