我有一个包含多个列的文件,如下所示:
MARKER EA NEA N_x EA_y NEA_y N_y
rs1000000 G A 231410.0 G A 118230.0
rs10000010 T C 322079.0 C T 118230.0
rs10000017 C T 233146.0 C T 118230.0
rs10000023 G T 233860.0 T G 118230.0
rs10000027 C G 72852.4 C G 118230.0
rs10000029 T C 179950.0 NA NA NA
rs1000002 C T 233932.0 C T 118230.0
我想用EA_y和NEA_y中的值替换EA和NEA列中的值,但如果EA_y和NEA_y是NA,那么我想保留EA和NEA中的值。
我可以在R中使用ifelse
但是我想学习如何使用awk
或类似内容。
注意:该文件大约有300万行
答案 0 :(得分:1)
使用awk可以轻松完成:
awk '$5 != "NA" && $6 != "NA" {$2=$5; $3=$6} 1' file | column -t
MARKER EA_y NEA_y N_x EA_y NEA_y N_y
rs1000000 G A 231410.0 G A 118230.0
rs10000010 T C 322079.0 T C 118230.0
rs10000017 C T 233146.0 C T 118230.0
rs10000023 G T 233860.0 G T 118230.0
rs10000027 C G 72852.4 C G 118230.0
rs10000029 T C 179950.0 NA NA NA
rs1000002 C T 233932.0 C T 118230.0
我使用column -t
进行输出的表格格式化。
答案 1 :(得分:0)
由于字段5,6,7始终同时设置为“NA”,因此您可以使用:
awk -v OFS="\t" 'NR>1&&$7!="NA"{$2=$5;$3=$6}1' file
如果要继续使用多个文件,请避免在ls
命令的输出上使用循环,最好使用find
来更好地控制路径的显示方式。< / p>