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 的方式替換第七列的值。
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)
嚴格檢查它們的值是否確實是一個數字,而不是使用前一個 ( $7 ~/^[01]$/
) 僅檢查單個整數數字 0 或 1,因此不適用於浮點數,例如1.0
or0.0
或 number帶有前導零,如000
或001
等。