Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash、awk或gawk修改行标志或标记后的列?_Bash_Awk_Gawk - Fatal编程技术网

使用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}
是最重要的事情。。。编辑你的建议;