Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
Regex Awk 3空间+;1空格或连字符_Regex_Bash_Awk - Fatal编程技术网

Regex Awk 3空间+;1空格或连字符

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.

我有一个相当大的图表要分析。每列由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.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不同。。。