2014-04-05 3 views
2

awk에서 else를 사용하는 방법?

foo.txt

firefox: 
Installed: 24.0+build1-0ubuntu1 
Candidate: 24.0+build1-0ubuntu1 

내가 Installed의 값과 Candidate이 same.If하지 않은 경우 첫 번째 줄에서 첫 번째 필드를 인쇄하려면, 나는 텍스트 파일을 가지고 있고 그것은 내용이 다음과 같다이다 그것도 비어있는 출력으로 충분합니다.

내가 시도

cat foo.txt | awk '$1~/^Installed:/ {var=$2;next} $1~/^Candidate:/ {var1=$2;next} NR==1 {pkg=$1} {if(var != var1) { print pkg;} }' 

그러나 당신이 AWK 솔루션을 제공하는 경우 nothing.It가 더 좋을 것이다 표시합니다.

답변

1

당신은 가까웠다 :

$ cat foo.txt 
firefox: 
Installed: 24.0+build1-0foo 
Candidate: 24.0+build1-0bar 

$ awk '$1~/^Installed:/ {var=$2;next} $1~/^Candidate:/ {var1=$2;next} NR==1 {pkg=$1} END {if(var != var1) { print pkg;} }' foo.txt 
firefox: 
+0

그리고 하나 더, 내가 원하지 않는''파이어 폭스의 마지막에서. –

+0

마침내 'END'를 사용해야합니까? –

+0

아니요, 대안으로 후보를 찾은 블록에서 테스트를 수행하거나 var 및 var1에 대한 테스트를 추가 할 수 있습니다. 모든 변수가 채워진 후 어딘가에서 완료되어야합니다. ':'을 제거하거나, 매뉴얼 페이지에서'sub()'를 보거나'FS = ": [[: space :]] +"'를 설정하십시오. –

관련 문제