我有一个包含几列的文件,如下所示:
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 万行
使用 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
对输出进行表格格式设置。
由于字段 5、6、7 始终同时设置为"NA",因此您可以使用:
awk -v OFS="t" 'NR>1&&$7!="NA"{$2=$5;$3=$6}1' file
如果要处理多个文件,请避免在 ls
命令的输出上使用循环,最好使用find
,以便更好地控制路径的外观。