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