"filename"이라는 파일에서 "yellow"라는 단어가 포함된 줄을 찾고 있다고 가정해 보겠습니다. 그런 다음 출력에 "셔츠의 색상은 노란색입니다"라고 표시하고 싶습니다.
"filename" 파일에서 추출한 줄이 다음과 같다고 가정해 보겠습니다.
blue green orange black purple white yellow pink
나는 이렇게 생각하고 있었지만 그것이 옳지 않다는 것을 알고 있습니다.
cat filename | grep yellow | awk '{print $7; echo "The colour of the shirt is {$7}}
답변1
기본적으로 grep을 사용한 후 한 줄의 출력을 얻었습니다. 그런 다음 행의 7번째 필드를 입력하고 "셔츠의 색상은 "{필드 7의 출력}"이라고 말하고 싶습니다.
글쎄요, 그게 더 이해가 되네요.
문자열과 함께 일곱 번째 필드를 인쇄하려면 다음을 사용하십시오.
awk '{ printf "The color is %s\n", $7 }'
또는
awk '{ print "The color is " $7 }'
(따옴표로 묶인 문자열과 사이에는 쉼표나 더하기 기호 또는 어떤 것도 없으며 $7
, 문자열은 서로 옆에 쓰기만 하면 awk에서 연결됩니다.)
grep
건너뛰고 내부적으로 동일한 작업을 수행 할 수도 있습니다 awk
.
awk '/some regex/ { printf "the seventh field is %s\n", $7 }'
awk에서 허용하는 정규식은 grep -E
.(미묘한 차이가 있는지 기억이 나지 않기 때문에 "대부분")과 동일합니다. 그러나 패턴 일치를 특정 필드로 지정할 수도 있습니다.
awk '$3 ~ /regex for field three/ { printf "the seventh field is %s\n", $7 }'
물론 일치하는 모든 라인을 처리합니다. 어리석은 예:
$ awk '$1 ~ /^j/ { printf "the shirt of %s is %s\n", $1, $2 } ' < shirts
the shirt of jimmy is blue
the shirt of joe is red
답변2
awk ‘/yellow/ { print “The colour of the shirt is yellow” }’ < filename
답변3
넌 다 할 수 있어awk
제프가 보여주듯, 또는 셸에서 쉽게 수행할 수 있습니다.
if grep -qF 'yellow' "filename"; then
echo 'The colour of the shirt is yellow'
fi
여기서는 아무것도 출력 -q
하지 않고 grep
(종료 상태에만 관심이 있음 grep
) "고정 문자열"(정규식이 아님)을 사용하여 검색하고 있음을 -F
알려줍니다 .grep
컨텐츠가 있는 경우
[some unrelated data here]
shirt colour: yellow
[some unrelated shirt data here]
그런 다음 사용할 수 있습니다
awk '/^shirt colour:/ { print "The colour of the shirt is", $NF }' filename
$NF
...주어진 정규식과 일치하는 줄의 마지막 필드( )에 있는 단어를 사용하여 메시지를 출력합니다.
또는,
awk '/^shirt colour:/ { printf("The colour of the shirt is %s\n", $NF) }' filename
$3
마지막 두 예에서는 ("마지막 필드 ") 대신 ("공백으로 구분된 세 번째 필드")를 사용할 수도 있습니다 $NF
.