특정 파일에서 텍스트를 찾을 수 없으면 0을 인쇄합니다.

특정 파일에서 텍스트를 찾을 수 없으면 0을 인쇄합니다.

grep특정 파일에서 찾을 수 없으면 0을 인쇄하고 싶습니다.

grep -A4 " Apple " a.txt | tail -1 | awk '{printf("%f", $4)}' >> out

나는 또한 if else 조건을 사용해 보았습니다.

if grep -A4 " Apple " a.txt | tail -1 ;
then 
    awk '{printf("%f", $4)}' >> out
else 
    echo 0 >> out
fi

예를 들어, 다음 파일이 제공됩니다.

Apple
is 
xyz 
abc def cost 352.271

내 명령은 apple352.271을 grep하고 인쇄합니다. 하지만 일치하는 항목이 없으면 인쇄하고 싶습니다 0.

답변1

당신이하려는 일은 다음과 같습니다.

if result=$(grep -A4 " Apple " a.txt); 
then 
    echo "$result"|tail -1|awk '{printf("%f",$4)}' >>out
else 
    echo 0 >>out
fi  

코드의 주요 문제점은 파이프를 사용할 때 종료 코드가 항상 케이스의 마지막 명령에서 나오므로 tail -1if 0조건이 항상 true라는 것입니다.

코드의 또 다른 문제는 awk '{printf("%f", $4)}' >> out이것이 입력을 어디서 얻느냐는 것 입니다 awk.

답변2

이유 없이 이 문제를 복잡하게 만들고 있습니다. 첫째, 그럴 필요가 없습니다 . Tell을 사용하여 입력의 마지막 줄에 대해서만 무언가를 실행할 tail수 있습니다 . 이렇게 하면 추가 보너스로 일치하는 항목이 없으면 명령 이 이미 다음을 인쇄합니다.awkENDawk0

$ cat file
Apple
is 
xyz 
abc def cost 352.271
$ grep -A4 "badstring" file | awk 'END{printf("%f\n", $4)}'
0.000000

하나만 얻으려고 한다면 0다음과 같이 할 수 있습니다.

$ grep -A4 "Apple" file | awk 'END{k= $4 ? $4 :  "0"; print k}'
352.271
$ grep -A4 "badsting" file | awk 'END{k= $4 ? $4 :  "0"; print k}'
0

관련 정보