使用 bash 或 awk 或 gawk 修改行标志或标记后的列?

Modifying columns after a line flag or marker using bash or awk or 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
SAJU -49.1528 0.3051 P
#  100  107  0.0

我需要修改第二列乘以 0.01 但我需要保持带有“#”的行完好无损,因此带有 # 的行的第二个不会改变。

知道如何在 awk 或 bash 中执行此操作吗?

非常感谢。

使用 awk:

awk '!="#" { *= 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 ' !~ /^#/ { *= 0.1} 1' file.txt