使用bash、awk或gawk修改行标志或标记后的列?
我有一个文本文件,格式如下:使用bash、awk或gawk修改行标志或标记后的列?,bash,awk,gawk,Bash,Awk,Gawk,我有一个文本文件,格式如下: # 100 104 0.0 LAFE 0.3831 0.9920 P MURC -33.1608 0.9966 P POPE -5.4608 0.3327 P # 100 105 0.0 LAFE -53.6463 0.9912 P MURC -48.3792 0.9988 P NARJ -51.5767 0.3749 P # 100 106 0.0 LAFE -51.8675 0.9882 P MURC -48.2517 0.9986 P SA
# 100 104 0.0
LAFE 0.3831 0.9920 P
MURC -33.1608 0.9966 P
POPE -5.4608 0.3327 P
# 100 105 0.0
LAFE -53.6463 0.9912 P
MURC -48.3792 0.9988 P
NARJ -51.5767 0.3749 P
# 100 106 0.0
LAFE -51.8675 0.9882 P
MURC -48.2517 0.9986 P
SAJU -49.1528 0.3051 P
# 100 107 0.0
我需要修改第二列乘以0.01,但我需要保持带有“#”的行不变,因此带有#的行的第二行不变
你知道如何在awk或bash中实现这一点吗
非常感谢 使用awk:
awk '$1!="#" {$2 *= 0.1} 1' file.txt
如果第一个字段不是#
,则将第二个字段乘以0.1。打印所有行
提供的数据集的结果:
# 100 104 0.0
LAFE 0.03831 0.9920 P
MURC -3.31608 0.9966 P
POPE -0.54608 0.3327 P
# 100 105 0.0
LAFE -5.36463 0.9912 P
MURC -4.83792 0.9988 P
NARJ -5.15767 0.3749 P
# 100 106 0.0
LAFE -5.18675 0.9882 P
MURC -4.82517 0.9986 P
SAJU -4.91528 0.3051 P
# 100 107 0.0
除此之外,如果存在#
在第一个字段中不单独存在的风险,则必须使用正则表达式进行检查,如Ed所述:
awk '$1 !~ /^#/ {$2 *= 0.1} 1' file.txt
Jean Francois,非常感谢兄弟!!脚本应以
1
结尾,而不是$0
。前者将打印所有行,后者将只打印非空行或内容数值计算为非零的行。使用这个特定的输入文件,无论哪种方式,您都会得到相同的输出,但这是一个坏习惯。还请注意,这取决于空格,因为它依赖于
后面有空格来将其标识为$1
。测试$1!~/^#/代码>而不是$1!=“#”
.Ed,感谢您的观察。将合并您的输入。@EdMorton和我认为删除{print}
是最重要的事情。。。编辑你的建议;