gpt4 book ai didi

awk - 如何使用 awk 跨多个列替换变量?

转载 作者:行者123 更新时间:2023-12-01 23:07:19 24 4
gpt4 key购买 nike

我有一个看起来像这样的文件,有 2060 行,顶部有一个标题(列名):

FID     IID     late_telangiectasia_G1  late_atrophy_G1 late_atrophy_G2 late_nipple_retraction_G1       late_nipple_retraction_G2       late_oedema_G1  late_oedema_G2  late_induration_tumour_G1       late_induration_outside_G1      late_induration_G2      late_arm_lympho_G1 late_hyper_G1
1 470502 1 0 0 0 0 0 0 0 0 0 0 0
2 470514 0 0 0 0 0 0 0 0 0 0 0 0
3 470422 0 0 0 0 0 0 0 0 0 0 0 1
4 470510 0 0 0 0 0 1 0 1 1 1 0 1
5 470506 0 0 0 0 0 0 0 0 0 0 0 0
6 471948 0 0 0 0 0 0 0 1 0 0 0 0
7 469922 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9
8 471220 0 1 1 -9 -9 0 0 1 1 1 0 0
9 470498 0 1 0 0 0 0 0 0 0 0 0 0
10 471993 0 1 1 0 0 0 0 0 0 0 0 0
11 470414 0 1 0 0 0 0 0 0 1 0 0 0
12 470522 0 0 0 0 0 0 0 0 0 0 0 0
13 470345 0 0 0 0 0 0 0 0 0 0 0 0
14 471275 0 1 0 -9 0 0 0 1 0 0 0 0
15 471283 0 1 0 0 0 0 0 1 1 0 0 0
16 472577 0 1 0 0 0 0 0 1 0 0 0 0
17 470492 0 1 0 0 0 0 0 0 0 0 0 0
18 472889 0 0 0 -9 0 0 0 0 0 0 0 0
19 470500 0 1 0 1 0 0 0 0 1 0 0 0
20 470493 0 0 0 0 0 0 0 1 1 0 0 0

我想替换第 3 列到第 12 列中的所有 0 -> 1 和 1 -> 2。我不想替换 -9。我知道对于单列命令将是:

awk'
{
if($3==1)$3=2
if($3==0)$3=1
}
1'file

因此,对于多列,是否有更简单的方法来指定范围而不是手动键入每个列号?

awk'
{
if($3,$4,$5,$6,$7,$8,$9,$10,$11,$12==1)$3,$4,$5,$6,$7,$8,$9,$10,$11,$12=2
if($3,$4,$5,$6,$7,$8,$9,$10,$11,$12==0)$3,$4,$5,$6,$7,$8,$9,$10,$11,$12=1
}
1'file

提前致谢

最佳答案

您可以使用循环并更改字段值,使用 $i

访问字段值
awk '
{
for(i=3; i<=12; i++) {
if ($i==1 || $i==0) $i++
}
}1
' file | column -t

关于awk - 如何使用 awk 跨多个列替换变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70641308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com