2014-03-31 4 views
0

출력에서부터 100 분의 1 초 후에 FTP get 명령에서 값을 구문 분석해야합니다. 스택 구성원의 도움으로 AWK를 사용하여 출력 된 값을 구문 분석하십시오.

ftp> 8.591220.98disconnect

은 내가 데이터를 얻기 위해 다음과 같은 사용하고있다 :

ut1intput=$(awk 'NR==70{for(i=1;i<=NF;i++)if($i=="ftp>")print $(i+1)} filename.txt) 

I 출력에서 ​​단어 "분리"를 제거하는 sed을 사용하고, 그러나 예를 들어

awk이 작업에 적합한 도구는 100 번째 인쇄 방법과 관련하여 혼란 스럽습니다.

나는 조언을 주시면 감사하겠습니다.

+1

이 두 번째 output'의'100 번째 의미는 무엇입니까? 정말로'8.591220.98' 토큰 전체 또는 마지막'.' 이후 부분 만 원합니까? '8.591220.98'이 유효한 숫자가 아니라면 정확히 무엇을 나타내는가? – mklement0

답변

1

그냥 즉각적인 문제 해결하기 : 당신이 필요로하는 모든 당신의 입력 데이터에서 숫자와 같은 토큰을 추출하는 경우

을, 당신은 단순히 수 다음과 같이 tr를 사용

tr -C -d '0-9.' <<<'ftp> 8.591220.98disconnect' # -> '8.591220.98' 

그러나 @ 같이 sub()를 사용하여, HAKON Hægland의 대답 원래 awk 프로그램에 원하는 작업을 통합 할 수있는 더 의미 :

ut1intput=$(awk ' 
    NR==70 { 
    for(i=1;i<=NF;i++) { 
     if($i=="ftp>") { 
     sub(/disconnect$/, "", $(i+1)); # remove 'disconnect' suffix 
     print $(i+1) 
     } 
    } 
    }' filename.txt) 
+1

'tr'에있는 세트에 대괄호를 사용하고 싶지는 않습니다. (필수 조건은 아닙니다.) (http://pubs.opengroup.org/onlinepubs/009696899/utilities/tr.html) 예기치 않은 결과가 나타날 수 있습니다. 문제의 문자열과 구문 분석 'tr '.-' '12'<<< '._ []? =''=>'1 _ []? ='tr '[.-]' '[12]'<<< '._ []? =''=>'1 _]]]]'. 문자 클래스에만 사용하고 싶을뿐입니다. –

+0

감사합니다. @ AdrianFrühwirth - 답변이 업데이트되었습니다. – mklement0

0

awk 명령 sub(/disconnect/,"", $i)은 단어 disconnect을 필드 번호 $i에서 제거합니다. 예를 들어 :

echo "8.591220.98disconnect" | awk '{sub(/disconnect/,"", $1)}1' 

을 제공합니다

8.591220.98 
관련 문제