1859115 2258379 24636 Yes 06S14028968 13 1 1 2
1859115 2258379 24636 Yes 06S14028968 13 1 1 2
1859116 2255037 21608 Yes 06S14028969 11 0 2 3
1859117 2268746 34027 Yes 06S14028970 10 0 2 1
上記は私のデータセットの例です。 1が2に変わり、0が1に変わるように7番目の列の値を変更したいと思います。だから私の予想結果は以下の通りです。
1859115 2258379 24636 Yes 06S14028968 13 2 1 2
1859115 2258379 24636 Yes 06S14028968 13 2 1 2
1859116 2255037 21608 Yes 06S14028969 11 1 2 3
1859117 2268746 34027 Yes 06S14028970 10 1 2 1
私はこのアプローチを試しました。
awk 'NR==1{$10="Pheno";print;next}\
$7 == "1" {$10="2"};\
$7 == "0" {$10="1"}1' old.txt |column -t > new.txt
次に、最初の行を削除します。しかし、直接的な方法が必要です。
答え1
列7の値が常に0または1の場合は、次のものを使用できます。
awk 'NR>1{ $7+=1 }1' infile
それ以外の場合は、その値が0または1であることを確認してください。
awk 'NR>1 && $7 ~/^[01]$/ { $7+=1 }1' infile
変更された値をコードの新しい列として追加するようです。新しい列に印刷する必要がある場合は、列7の値が常に0または1であるという同じ仮定に従います。
awk '{ print $0, (NR==1?"Pheno":++$7) }' infile
それ以外の場合:
awk '{ print $0, (NR==1?"Pheno":($7 ~/^[01]$/?++$7:"NA") ) }' infile
注:その値が実際に数値であることを厳密に確認する$7 ~/^[01]$/
ように変更されました($7==1 || $7==0)
。古い()を使用する代わりに単一の整数の数字0または1のみを確認するため、orまたはorなどの前にゼロがある数字などの$7 ~/^[01]$/
浮動小数点数には機能しません。 。1.0
0.0
000
001