基于列的文件中的条件替换



我有一个包含几列的文件,如下所示:

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,以便更好地控制路径的外观。

相关内容

  • 没有找到相关文章

最新更新