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