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
내 명령은 apple
352.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 -1
if 0
조건이 항상 true라는 것입니다.
코드의 또 다른 문제는 awk '{printf("%f", $4)}' >> out
이것이 입력을 어디서 얻느냐는 것 입니다 awk
.
답변2
이유 없이 이 문제를 복잡하게 만들고 있습니다. 첫째, 그럴 필요가 없습니다 . Tell을 사용하여 입력의 마지막 줄에 대해서만 무언가를 실행할 tail
수 있습니다 . 이렇게 하면 추가 보너스로 일치하는 항목이 없으면 명령 이 이미 다음을 인쇄합니다.awk
END
awk
0
$ 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