IT story

awk 인쇄 열 $ 3 if $ 2 == a specific value?

hot-time 2020. 8. 20. 20:08
반응형

awk 인쇄 열 $ 3 if $ 2 == a specific value?


나는 awk 프로그래밍 언어에서 awk를 배우고 있으며이 예제에 신경을 쓰고 있습니다.

$ 2가 값 (예 : 1 ')과 같으면 $ 3을 인쇄하고 싶은 경우이 명령을 사용하면 잘 작동합니다.

awk '$2==1 {print $3}' <infile> | more

그러나 1을 다른 검색 기준 (예 : 'findtext')으로 대체하면이 명령이 작동하지 않습니다.

awk '$1== findtext {print $3}' <infile> | more

이것은 출력을 반환하지 않으며 'findtext'에 넣은 내용이 그 장소에 존재한다고 확신합니다. 내 구문에 문제가 있습니까?

나는 이것을 시도했지만 작동하지 않습니다.

awk '$1== "findtext" {print $3}' <infile> | more

하지만 내가 할 때

grep findtext <infile>  ## This does give me output

두 번 확인한 결과 $ 1에 findtext가 있습니다.

예를 들어 'test'라는 이름의 테스트 파일은 다음과 같습니다. 9 줄, 8 개 필드 및 공백으로 구분됩니다.

1 11 0.959660297 0 0.021231423 -0.0073 -0.0031 MhZisp
2 14 0.180467091 0.800424628 0 0.0566 0.0103 ClNonZ
3 19 0.98089172 0 0 -0.0158 0.0124 MhNonZ
4 15 0.704883227 0.265392781 0.010615711 -0.0087 -0.0092 MhZisp
5 22 0.010615711 0.959660297 0.010615711 0.0476 0.0061 ClNonZ
6 23 0.715498938 0 0.265392781 -0.0013 -0.0309 Unkn
7 26 0.927813163 0 0.053078556 -0.0051 -0.0636 MhZisp
8 44 0.55626327 0.222929936 0.201698514 0.0053 -0.0438 MhZisp
9 31 0.492569002 0.350318471 0.138004246 0.0485 0.0088 ClNonZ

내가 한 일과 결과는 다음과 같습니다.

$awk '$8 == "ClNonZ" {print $3}' test 

$ grep ClNonZ test 
2 14 0.180467091 0.800424628 0 0.0566 0.0103 ClNonZ
5 22 0.010615711 0.959660297 0.010615711 0.0476 0.0061 ClNonZ
9 31 0.492569002 0.350318471 0.138004246 0.0485 0.0088 ClNonZ

$ 8에 "ClNonZ"가있는 $ 3이 표시 될 것으로 예상합니다.

0.180467091 
0.010615711 
0.492569002

awk 명령이 아무 것도 반환하지 않은 이유를 모릅니다. 이견있는 사람?


특정 문자열을 찾으려면 그 주위에 따옴표를 넣으십시오.

awk '$1 == "findtext" {print $3}'

그렇지 않으면 awk는 변수 이름이라고 가정합니다.


이 방법은 regexp를 사용하며 작동합니다.

awk '$2 ~ /findtext/ {print $3}' <infile>

AWK구현 에 따라 사용 여부 ==는 괜찮습니다.

시도해 보셨습니까 ~?. 예를 들어 $ 1을 "hello"로 지정하려면 다음을 수행하십시오.

awk '$1 ~ /^hello$/{ print $3; }' <infile>

^$ 1 시작을 의미하고 $$ 1 끝입니다.


내 awk 버전은 3.1.5입니다.

예, 입력 파일은 공백으로 구분되며 탭은 없습니다.

arutaku의 답변에 따르면, 내가 시도한 것은 다음과 같습니다.

awk '$8 ~ "ClNonZ"{ print $3; }' test  
0.180467091
0.010615711
0.492569002


$ awk '$8 ~ "ClNonZ" { print $3}' test  
0.180467091
0.010615711
0.492569002

작동하지 않은 것 (왜 그리고 아마도 내 awk 버전으로 인해 :),

$awk '$8 ~ "^ClNonZ$"{ print $3; }' test
$awk '$8 == "ClNonZ" { print $3 }' test

귀하의 답변, 의견 및 도움에 감사드립니다!


이것은 나를 위해 더 읽기 쉽습니다.

awk '{if ($2 ~ /findtext/) print $3}' <infile>

이것을 시도하십시오

echo $VAR | grep ClNonZ | awk '{print $3}';

또는

echo cat filename | grep ClNonZ | awk '{print $3}';

참고URL : https://stackoverflow.com/questions/14739057/awk-print-column-3-if-2-a-specific-value

반응형