awk 명령은 첫 번째 열 값을 1로 인쇄합니다.

awk 명령은 첫 번째 열 값을 1로 인쇄합니다.

열 5의 값을 사용할 수 있고 열 1과 2가 같고 열 3과 4가 같은 경우 열 1과 5를 인쇄하려고 합니다. 위의 경우 다음 명령을 사용합니다.

awk 'length($5) && $1=$2 && $3=$4 {print $1" "$5}' filename

아래는 다음 내용을 포함한 내 파일입니다.

343 222 222 333 333 test
565 444 444 555 555 testi
234 121 121 454 454 
345 676 676 343 343 testin

하지만 내가 얻은 첫 번째 열 값은 1이고 출력은 다음과 같습니다.

1 test
1 testi
1 testin

내 명령에는 3가지 조건이 있는데, 2가지 조건을 사용하면 제대로 작동합니다. 누구든지 내가 1의 결과를 얻는 이유와 해결 방법을 설명할 수 있습니까?

답변1

=그것은 직업이다. 값을 비교하는 데 사용됩니다 ==. 1당신은 그것을 본질적으로 소유하고 있기 때문에 그것을 얻습니다 $1 = ($2 && $3 = $4).

awk 'NF == 5 && $1 == $2 && $3 == $4 { print $1, $5 }' filename

또한 데이터에 4개 또는 5개가 아닌 5개 또는 6개의 열이 포함되어 있으므로

$ awk 'NF == 6 && $2 == $3 && $4 == $5 { print $1, $6 }' filename
343 test
565 testi
345 testin

NFawk현재 레코드의 필드 수를 포함하는 변수 입니다 . 기본 출력 구분 기호( OFS)는 공백이므로 명시적으로 공백을 인쇄할 필요가 없습니다 print.

또한 명시적인 공백을 인쇄하려면 다음과 같이 더 읽기 쉽습니다.

print $1 " " $6

대신에

print $1" "$6

awk변수와 문자열의 값이 차례로 나타날 때 연결합니다. 변수와 문자열 사이의 공백은 중요하지 않습니다.

답변2

Command: awk '{if ((length($6) >0) && ($2==$3) && ($4==$5)) {print $1,$6}}'  filename

산출

veen_linux_example ~]#

 awk '{if ((length($6) >0) && ($2==$3) && ($4==$5)) {print $1,$6}}' filename

343 test
565 testi
345 testin

관련 정보