如果某個查詢的列低于某個值,我想替換多個列值。
示例檔案測驗:
cat test
OTU Phy P.conf Class C.conf Ord ord.conf Spec S.conf
1 Mollusca 90 Bivalvia 80 Venerida 80 Rangia 80
2 Chordata 88 Fish 20 Salmon 0 pink 0
3 Cnidaria 100 Coral 78 fire 22 octo 12
基本上,如果置信度值低于某個值,我想將分類名稱命名為“NA”。
我試過這個:
cat test | awk ' $3<90 {$2="NA"}1'
OTU Phy P.conf Class C.conf Ord ord.conf Spec S.conf
1 Mollusca 90 Bivalvia 80 Venerida 80 Rangia 80
2 NA 88 Fish 20 Salmon 0 pink 0
3 Cnidaria 100 Coral 78 fire 22 octo 12
這會將第二行的 Phylum 名稱(Phy 列)更改為 NA,因為 Phy 置信度列(第 3 列)低于 90。
我想做的是,如果第 3 列中的值低于 90,那么我也想將右側的附加列(較低的分類級別)更改為 NA:例如
OTU Phy P.conf Class C.conf Ord ord.conf Spec S.conf
1 Mollusca 90 Bivalvia 80 Venerida 80 Rangia 80
2 NA 88 NA 20 NA 0 NA 0
3 Cnidaria 100 Coral 78 fire 22 octo 12
我認為這很容易,但是當滿足第一個條件時如何更改多個列?
謝謝你的幫助。
LP
uj5u.com熱心網友回復:
您可以使用它awk在何時過濾一行$3 < 90并將每個非數字欄位更改為NA:
awk '$3 < 90 {for (i=2; i<=NF; i) if ($i 0 != $i) $i = "NA"} 1' file
OTU Phy P.conf Class C.conf Ord ord.conf Spec S.conf
1 Mollusca 90 Bivalvia 80 Venerida 80 Rangia 80
2 NA 88 NA 20 NA 0 NA 0
3 Cnidaria 100 Coral 78 fire 22 octo 12
uj5u.com熱心網友回復:
如何更改多個列
假設您事先知道他們的位置,這很容易-只需使用多個=,讓file.txt內容成為
OTU Phy P.conf Class C.conf Ord ord.conf Spec S.conf
1 Mollusca 90 Bivalvia 80 Venerida 80 Rangia 80
2 Chordata 88 Fish 20 Salmon 0 pink 0
3 Cnidaria 100 Coral 78 fire 22 octo 12
然后
awk '$3<90 {$2=$4=$6=$8="NA"}1' file.txt
輸出
OTU Phy P.conf Class C.conf Ord ord.conf Spec S.conf
1 Mollusca 90 Bivalvia 80 Venerida 80 Rangia 80
2 NA 88 NA 20 NA 0 NA 0
3 Cnidaria 100 Coral 78 fire 22 octo 12
請注意,這不僅限于列,但您也可以使用內置變數執行此操作,例如
BEGIN{FS=OFS=","}
確實將欄位分隔符 ( FS) 和輸出欄位分隔符 ( OFS) 設定為 be,和其他變數,例如
BEGIN{x=y=z=1}
相當于
BEGIN{x=1;y=1;z=1}
(在 gawk 4.2.1 中測驗)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/445479.html
上一篇:組合.wav檔案的排列
