열 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
NF
awk
현재 레코드의 필드 수를 포함하는 변수 입니다 . 기본 출력 구분 기호( 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