awk - 使用两列中的特定值进行 awk 替换
问题描述
我有一个看起来像这样的文件:
20:60479_C_T 60479 C T 0 0 0 0 0 1 0 1
20:60522_T_TC 60522 T TC 0 0 0 0 0 0 0
20:60568_A_C 60568 A C 0 0 1 0 0 1
20:60571_C_A 60571 C A 0 1 0 1 0 0
20:60579_G_A 60579 G A 0 0 1 0 0 0
我当前的文件更大,有 300 万行和 3,000 列。我想使用列中的值$3
并$4
替换0
其余1
列中的值。所需的输出将是:
20:60479_C_T 60479 C T C C C C C T C T
20:60522_T_TC 60522 T TC T T T T T T T
20:60568_A_C 60568 A C A A C A A C
20:60571_C_A 60571 C A C A C A C C
20:60579_G_A 60579 G A G G A G G G
我知道如何为几列做到这一点:
awk '{d["0"]=$3; d["1"]=$4; print "20", $1, "0", $2, d[$5], d[$6];}' myfile
但我不知道如何为所有列自动执行并避免手动添加所有列
解决方案
$ awk '{d[0]=$3; d[1]=$4; for (i=5; i<=NF; i++) $i=d[$i]} 1' file
20:60479_C_T 60479 C T C C C C C T C T
20:60522_T_TC 60522 T TC T T T T T T T
20:60568_A_C 60568 A C A A C A A C
20:60571_C_A 60571 C A C A C A C C
20:60579_G_A 60579 G A G G A G G G
推荐阅读
- google-apps-script - 如何使用 Google SAML 签署断言
- c - 这是一个 c 程序,我无法理解这部分(k+=j<10?4:3)
- java - 春季启动卡夫卡消费者ID
- php - 如何在 Laravel 8 中使用 EXCEPT
- css - 标签不受类的影响
- java - 能够在 MAP 中切换到全屏但不能最小化它
- algorithm - 号码优先级列表的算法(投票)
- javascript - typeorm cli 不会等待从 ormconfig.ts 导出的异步方法
- python-3.x - 大熊猫的百分比计算
- css - 在 React 站点上使用 CSS 规则插件时未找到 GSAP 目标未定义