다음과 같은 정보가 포함된 간단한 txt 파일이 있습니다.
"John;23124;Firefighter;[email protected]"
"Hannah;34241;Hairdresser;[email protected]"
내가 원하는 것은 주어진 매개변수를 비교하여 if 문을 표현하고 해당 매개변수가 파일 텍스트의 어떤 줄과 같은지 확인하는 것입니다. 예를 들어 ("John" 23124 "Fireman""[이메일 보호됨]")는 내가 제공하는 인수이며 파일의 첫 번째 줄과 일치합니다.
시도해 보았지만 if[(cat filename.txt | grep $2 | wc -l) - gt 0]
작동하지 않는 것 같습니다.
답변1
완료하는 데 사용할 수 있습니다 awk
.
파일이 로 구분된 경우 매개변수를 ;
추가해야 합니다 -F ';'
.
cat yourfile | awk -F ';' '{print ($2>30000)? "foo" : "bar"}'
bar
첫 번째 줄(매개변수가 너무 낮음)
과 foo
두 번째 줄을 인쇄합니다 .
존재 하는지 확인하려면 $2
다음을 수행하십시오.
cat yourfile | awk -F ';' '{print $2? "foo" : "bar"}'
특정 패턴이 있는 행 수를 알고 싶다면 다음을 수행하세요.
cat yourfile | awk -F ';' '{printf("%s", $2? "foo\n" : "")}' | wc -l
그런 다음 다음 조건에서 사용할 수 있습니다.
[ $(cat yourfile | awk -F ';' '{printf("%s", $2? "foo\n" : "")}' | wc -l) -gt 2 ] \
&& echo "at least 2 matches" \
|| echo "less than 2 matches"
if
또는 진술을 선호하는 경우 :
if [ $(cat yourfile | awk -F ';' '{printf("%s", $2? "foo\n" : "")}' | wc -l) -gt 2 ];
then
echo "at least 2 matches"
else
echo "less than 2 matches";
fi