2012-12-12 4 views
1

쉘 변수를 awk에 전달하고, 설정하고, 같은 라인의 다른 awk에서 사용하고 인쇄 할 수 있습니까?awk에서 쉘 변수를 설정하고 재사용

나는 $ 6 (ABC 123456M123000) 구문 분석, 첫번째 변수에 $ 0 (0 모든 필드)를 저장할 - '12300'를 얻을 그것에 범위 체크를하고 있다면 만족, 인쇄 모든 필드 ($ 0)

1 부 :

line="hello" 
java class .... | awk -F, -v '{line=$0}' | awk 'begin my range check code' | if(p>100) print $line } 

2 부 : 나는 변수에 모든 필드를 저장하면 $ 6 "ABC 123456M123000"(내가 해석하는 문자열) , 내가 이것을 사용하여 $ 6 구문 분석 할 수 = 내가 할 노력하고 있어요 :

awk 'begin {FS=" "} { print $2; len=length($2); p=substr($2,8,len)+0 ; print len,p ; if(p>100) print $line }' 

하지만 내 질문은 part1 : $ 0 변수에 저장하는 방법 그래서 내 수표를 완료 한 후 인쇄 할 수 있습니까?

답변

2

awk의 다중 호출이 필요한 이유가 명확하지 않습니다. 당신은 'M'에 분할하지만, (원하는 값을 추출하기 위해 또는 다른 방법) SUBSTR을 사용할 필요가없는 경우,

... | awk -F, '{split($6, f, "M")} f[2] > min' min=100 

또는 : 당신의 설명에서, 방금 일을하려고하는 것 같습니다 : 쉘와

... | awk -F, '{ split($6, f, " ")} 0+substr(f[2], 8) > min' min=100 
+0

$ 1, $ 2 ... 모든 필드를 인쇄하고 싶습니다. 그래서 나는 두 개의 awks를 사용하는 것을 생각했다. 또한 'M'은 예제 일 뿐이며 모든 문자가있을 수 있습니다. 그 인덱스를 기반으로 substr을 사용하는 이유는 – swap

+0

고마워요! 그게 효과가있어! – swap

+0

+ 1 솔루션에 대해서만 awk 내장 조건/동작 처리를 사용할 수 있습니까? awk -F, {split ($ 6, f, "M")} [최소]> min'' –

0

:

java ... | while IFS= read -r line ; do 
    sixth=$(IFS=,; set -- $line; echo "$6") 
    val=${sixth:11} 
    (($val > 100)) && echo "$line" 
done 

이 일부 bash는-ISMS.

관련 문제