Regex Awk 3空间+;1空格或连字符
我有一个相当大的图表要分析。每列由4个空格或3个空格和连字符分隔(因为图表中的数字可以是负数) 只打印一系列0。我试图理解AWK和什么时候逃跑等等,但我没有掌握窍门。谢谢你的帮助 一行:Regex Awk 3空间+;1空格或连字符,regex,bash,awk,Regex,Bash,Awk,我有一个相当大的图表要分析。每列由4个空格或3个空格和连字符分隔(因为图表中的数字可以是负数) 只打印一系列0。我试图理解AWK和什么时候逃跑等等,但我没有掌握窍门。谢谢你的帮助 一行: 1979 1 -0.176 -0.185 -0.412 0.069 -0.129 0.297 -2.132 -0.334 -0.019 1979 1 -0.176 0.185 -0.412 0.069 -0.129 0.297 -2.
1979 1 -0.176 -0.185 -0.412 0.069 -0.129 0.297 -2.132 -0.334 -0.019
1979 1 -0.176 0.185 -0.412 0.069 -0.129 0.297 -2.132 -0.334 -0.019
我只想看第二栏。我复制了这行,但我想看到-0.185和0.185。您需要从思考
bash
引用开始,因为bash将参数解释为awk,而awk将是awk程序。在双引号字符串中,bash
将$0
扩展为bash可执行文件(或当前脚本)的名称;这几乎肯定不是您想要的,因为它不会是带引号的字符串。事实上,您几乎不希望在awk程序参数周围使用双引号,因此您应该养成编写awk'…'
的习惯
另外,awk
正则表达式不理解\s
(尽管Gnu-awk将把它作为扩展处理)。然后match
返回匹配的位置,我认为您也不关心这个位置
由于默认情况下,
awk
将任何空格序列视为字段分隔符,因此不需要玩任何游戏就可以获得第四列。只需使用awk'{print$4}'
您需要从思考bash
引用开始,因为bash将参数解释为awk,而awk将是awk程序。在双引号字符串中,bash
将$0
扩展为bash可执行文件(或当前脚本)的名称;这几乎肯定不是您想要的,因为它不会是带引号的字符串。事实上,您几乎不希望在awk程序参数周围使用双引号,因此您应该养成编写awk'…'
的习惯
另外,awk
正则表达式不理解\s
(尽管Gnu-awk将把它作为扩展处理)。然后match
返回匹配的位置,我认为您也不关心这个位置
由于默认情况下,
awk
将任何空格序列视为字段分隔符,因此不需要玩任何游戏就可以获得第四列。只需使用awk'{print$4}'
如果您试图按照3或4个空格分割输入,那么您将仅从第3列获得预期的输出
$ awk -v FS=" {3,4}" '{print $3}' file
-0.185
0.185
FS=“{3,4}”
这里我们传递一个正则表达式作为FS值。解析此正则表达式并将字段分隔符值设置为三个或四个空格。在regex{min,max}
中,称为范围量词,它将上一个标记从最小时间重复到最大时间。如果您试图按照3或4个空格分割输入,那么您将仅从第3列获得预期的输出
$ awk -v FS=" {3,4}" '{print $3}' file
-0.185
0.185
FS=“{3,4}”
这里我们传递一个正则表达式作为FS值。解析此正则表达式并将字段分隔符值设置为三个或四个空格。在regex{min,max}
中,称为范围量词,它将上一个标记从最小时间重复到最大时间。为什么不使用这个简单的awk
awk '$0=$4' Data.txt
-0.185
0.185
它将$0
设置为$4
中的值,并执行默认操作,即打印。PS不要将
cat
与能够读取数据的程序一起使用,如awk
awk '$0=$4' Data.txt
-0.185
0.185
如果归档的4
包含0
,则可以使其更健壮,如:
awk '{$0=$4}1' Data.txt
为什么不直接使用这个简单的
awk
awk '$0=$4' Data.txt
-0.185
0.185
它将$0
设置为$4
中的值,并执行默认操作,即打印。PS不要将
cat
与能够读取数据的程序一起使用,如awk
awk '$0=$4' Data.txt
-0.185
0.185
如果归档的4
包含0
,则可以使其更健壮,如:
awk '{$0=$4}1' Data.txt
有预期输出的例子会更好。我想看看-0.185和0.185。为什么
-0.176
是第二列,前面有三个空格。有预期输出的示例会更好。我想看看-0.185和0.185。为什么-0.176
是第二列,前面有三个空格。这就解决了它。我甚至不需要使用match()。谢谢添加了更多信息。来,吃一些加一。我认为最后一句话应该是:永远不要在双引号内写AWK。始终使用单引号。这就解决了它。我甚至不需要使用match()。谢谢添加了更多信息。来,吃一些加一。我认为最后一句话应该是:永远不要在双引号内写AWK。总是使用单引号。我没有考虑到“代码”>回声“12”AWK“{打印2美元}”<代码> >“一”和“二”之间的多个空格,空格数不是AWK类的……我没有投票,而是考虑“<代码>回声”12’AWK“{打印2美元}”会发生什么。“如果在“1”和“2”之间有多个空格,则限定空格的数量与awk不同。。。