Awk
將數值重新格式化為兩個值
我有一個巨大的文件,其中包含許多列和行中的數值。第 6 列之後的列中的值都是數字加上缺少
NA
(0
或1
或)。2``NA
我想以這種方式更改第 7 列及以後所有列中的值:
0
toA A
、1
toA B
、2
toB B
和NA
to0 0
。這樣,第 7 列的標題將是兩次。我可以這樣做awk
嗎?我的輸入文件是這樣的,但在此之後有很多列。我的輸出文件應該是製表符分隔的。id1 id2 parental maternal sex phenotype A_101 A_102 A_103 20907153 20907153 0 0 -9 -9 1 0 0 0 0 0 31405729 31405729 0 0 -9 -9 0 0 0 0 0 0 31450731 31450731 0 0 -9 -9 0 0 0 2 0 0 41940308 41940308 0 0 -9 -9 0 0 0 NA 0 0 52428081 52428081 0 0 -9 -9 0 0 0 0 0 0 41943104 41943104 0 0 -9 -9 0 0 0 0 0 0
有點長,但直截了當:
awk '{ for (i=7; i<=NF; i++) { if ($i=="0"){ sub(0,"A A",$i) } else if ($i=="1"){ sub(1,"A B",$i) } else if ($i=="2") {sub(2,"B B",$i) } else if ($i=="NA") { sub("NA","0 0",$i) }} print $0}' inputfile.txt
如果欄位編號> = 7,則循環遍歷每個欄位,如果匹配您的條件之一,則將該欄位替換為相應的對。循環後列印整行。
對我來說,這會返回:
id1 id2 parental maternal sex phenotype A_101 A_102 A_103 20907153 20907153 0 0 -9 -9 A B A A A A A A A A A A 31405729 31405729 0 0 -9 -9 A A A A A A A A A A A A 31450731 31450731 0 0 -9 -9 A A A A A A B B A A A A 41940308 41940308 0 0 -9 -9 A A A A A A 0 0 A A A A 52428081 52428081 0 0 -9 -9 A A A A A A A A A A A A 41943104 41943104 0 0 -9 -9 A A A A A A A A A A A A