열 2에 q가 있으면 열 1에 val을 인쇄하고, 열 2에 q가 없으면 열 2에 동일한 값을 인쇄합니다.

열 2에 q가 있으면 열 1에 val을 인쇄하고, 열 2에 q가 없으면 열 2에 동일한 값을 인쇄합니다.
A01_106367192   A01_106367192
A01_106359962   A01_106359962
A01_106106644   A01_106106656
A01_106045906   A01_106045909
A01_105865211   A01_105865216
A01_105877866   q
B01_114451441   q
A01_105801529   A01_105801532
A01_105803107   A01_105803079
A01_105803074   A01_105803079
A01_105061789   A01_105061763
A01_105408577   A01_105408577
A01_104975080   A01_104975074
A01_104994687   A01_104994690
A01_104983310   q
A01_104542183   A01_104542186
A01_104652672   q
A01_104652685   A01_104652679
A01_105006416   A01_105006421
A01_105136838   A01_105136837
A01_104359686   q
A01_104359660   A01_104359665

awk '{if ($2 == q) print $1; else print$2 }' input_file |less

열 2를 있는 그대로 반환합니다.

답변1

귀하의 코드:

awk '{if ($2 == q) print $1; else print$2 }' input_file

$1그러면 if $2같음 awk변수가 인쇄됩니다 q. 변수가 초기화되지 않았으므로 q다음과 같이 정의하지 않으면 테스트가 참이 아닐 가능성이 높습니다. "q"명령줄에서:

 awk -vq="q" '{if ($2 == q) print $1; else print $2 }'

"q"아마도 당신이 원하는 것은 코드 자체와 비교하는 것입니다.

awk '{if ($2 == "q") print $1; else print $2 }' input_file

또는 같은 내용을 좀 더 관용적으로 표현하려면 다음과 같이 하세요.

awk '$2 == "q" { print $1 } $2 != "q" { print $2 }'

또는,

awk '$2 == "q" { print $1; next } { print $2 }'

또는 다음과 같이RomanPerekrest의 솔루션표시하려면 삼항 ?:연산자를 사용하세요.

답변2

짧은방법:

awk '{ print ($2=="q"? $1:$2) }' file
  • $2=="q"? $1:$2- 삼항 조건의 의미: 표현식이 다음 $2=="q과 같이 평가 되면 true- 왼쪽 피연산자를 인쇄하고 $1, 그렇지 않으면 - 오른쪽 피연산자를 인쇄합니다.$2

산출:

A01_106367192
A01_106359962
A01_106106656
A01_106045909
A01_105865216
A01_105877866
B01_114451441
A01_105801532
A01_105803079
A01_105803079
A01_105061763
A01_105408577
A01_104975074
A01_104994690
A01_104983310
A01_104542186
A01_104652672
A01_104652679
A01_105006421
A01_105136837
A01_104359686
A01_104359665

관련 정보