2013-10-28 13 views
0

의 파일 시나리오에서 라인을 읽기배쉬 :</p> <p>파일 내용 : :이 시나리오가 나오지 또는 AWK

10.1.1.1 
10.1.1.2 
10.1.1.3 
10.1.1.4 

내가 나오지도 또는 AWK 원하는을 그래서 때 내가 고양이 파일마다 새로운 라인을 반환됩니다.

같은

첫 번째 반복 :

cat ip | some magic 
10.1.1.1 

Second iteration returns 
10.1.1.2 
Third iteration returns 
10.1.1.3 
Fourth iteration returns 
10.1.1.4 

과 반복 n 개의 후에는 1 개

5 번 반복 반환 줄을 반환

10.1.1.1 

우리가 그것을 할 수 있습니다 sed 또는 awk를 사용합니다.

+0

'sed' 또는'awk'를 지정했거나 다른 언어의 솔루션이 수용 가능한 이유가 있습니까? – Ladadadada

답변

1

당신은 파일의 줄 번호를 저장해야합니다 각 호출에서 모듈러스로 증가시킵니다.

get_line() { 
    if [[ ! -e /var/local/get_line.next ]] 
    then 
     if [[ ! -e /var/local ]] 
     then 
      mkdir -p /var/local 
     fi 
     line_no=1 
    else 
     line_no=$(< /var/local/get_line.next) 
    fi 
    file_length=(wc -l < ip_file) 
    if ((file_length == 0)) 
    then 
     echo "Error: Data file is empty" >&2 
     return 1 
    fi 
    if ((line > file_length)) 
    then 
     line=1 
    fi 
    sed -n "$line_no{p;q}" ip_file 
    echo "$((++line_no))" > /var/local/get_line.next 
} 

이 스크립트에서 통합 할 수있는 함수의 형태이다. get_line.next 파일의 위치를 ​​자유롭게 변경하십시오. 필요한 경우 파일을 읽거나 쓰거나 디렉토리를 만들려면 사용 권한이 올바른 것이어야합니다.

cat을 사용할 필요가 없습니다.

1

고양이와 함께 할 수 없습니다. 당신이 파이프를 사용할 수 있도록 당신은 또한

당신은이 작업을 수행 할 수 있습니다 .. 파이프에 추구 할 수없는 중첩 된 while 루프

while ((1)) 
do 
    while read line 
    do 
     echo "$line" 
    done <somefile 
done 
+0

파일을 무한 루프로 출력하고, 더 짧은 while ((1)); 고양이 somefile을해라. 다. 'while ((1))'은 'while true'또는'while :'이라고 쓰여질 수 있음에 유의하십시오. 거의 항상'-r'을'read'와 함께 사용해야합니다. –

+0

@DennisWilliamson도 교육으로. '동안 ((1)); 고양이 somefile을해라. done'은 echo $ file을 do_something_useful로 대체 할 수있는 것과 완전히 같지 않습니다. 그리고 이것은 OPs 요구 사항을 만족합니다. 'n 회 반복 후 1 행으로 돌아갑니다'. – Iain

관련 문제