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
'IT story' 카테고리의 다른 글
GPL 및 LGPL 오픈 소스 라이선스 제한 [닫힘] (0) | 2020.08.20 |
---|---|
Automapper-속성 설정자 대신 생성자 매개 변수에 매핑하는 방법 (0) | 2020.08.20 |
toString () 및 hashCode ()가 재정의되었을 때 Java에서 객체의 "객체 참조"를 어떻게 얻습니까? (0) | 2020.08.20 |
태스크는 어떻게합니까 (0) | 2020.08.20 |
tsconfig 옵션 "lib"의 기능은 무엇입니까? (0) | 2020.08.19 |