Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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
linux中的AWK问题_Awk - Fatal编程技术网

linux中的AWK问题

linux中的AWK问题,awk,Awk,我有以下文件(teste.tsv): 我必须只打印teste.tsv文件中带有单词“blah”的行 我做了一个命令行: cat teste.tsv | awk -F " " '{if($1 == "blah"){print $0}}' 但我知道这是错误的,因为我想掩饰任何开始胡说八道的话。我试过$1==“blah*”或$1==“blah.*”但什么也没发生 有人能帮我吗? 非常感谢。请尝试以下内容 awk 'BEGIN{FS="_"} $1=="blah"' Input_file awk '

我有以下文件(teste.tsv):

我必须只打印teste.tsv文件中带有单词“blah”的行

我做了一个命令行:

cat teste.tsv | awk -F " " '{if($1 == "blah"){print $0}}'
但我知道这是错误的,因为我想掩饰任何开始胡说八道的话。我试过$1==“blah*”或$1==“blah.*”但什么也没发生

有人能帮我吗?
非常感谢。

请尝试以下内容

awk 'BEGIN{FS="_"} $1=="blah"' Input_file
awk 'BEGIN{FS="_"} /^blah/' Input_file
OP的代码问题:OP的逻辑似乎很好,但第一个字段不仅有
废话
,还有
的其他内容。这就是它不能正确打印的原因

我的修复:我已将
作为所有行的字段分隔符。现在,当我们将第一个字段与条件进行比较时,它将捕获字符串
blah



上面将在第一个字段中查找确切的单词
blah
,以防您想使用regexp,然后尝试以下操作

awk 'BEGIN{FS="_"} $1=="blah"' Input_file
awk 'BEGIN{FS="_"} /^blah/' Input_file
或不设置分隔符:

awk '/^blah/' Input_file

你能试试下面的吗

awk 'BEGIN{FS="_"} $1=="blah"' Input_file
awk 'BEGIN{FS="_"} /^blah/' Input_file
OP的代码问题:OP的逻辑似乎很好,但第一个字段不仅有
废话
,还有
的其他内容。这就是它不能正确打印的原因

我的修复:我已将
作为所有行的字段分隔符。现在,当我们将第一个字段与条件进行比较时,它将捕获字符串
blah



上面将在第一个字段中查找确切的单词
blah
,以防您想使用regexp,然后尝试以下操作

awk 'BEGIN{FS="_"} $1=="blah"' Input_file
awk 'BEGIN{FS="_"} /^blah/' Input_file
或不设置分隔符:

awk '/^blah/' Input_file

=
是字符串比较运算符,
~
是regexp比较运算符。您的代码正在使用字符串比较(
==
),但试图在其中使用regexp元字符(
*
*

这两个选项中的任何一个都将打印以
开头的每一行。它们正在进行regexp比较:

awk '/^blah/' file
awk '$0 ~ /^blah/' file
awk 'match($0,/^blah/)' file
awk 'match($0,/blah/) == 1' file
awk 'index($0,"blah") == 1' file
awk 'substr($0,1,4) == "blah"' file
在执行字符串比较时:

awk '/^blah/' file
awk '$0 ~ /^blah/' file
awk 'match($0,/^blah/)' file
awk 'match($0,/blah/) == 1' file
awk 'index($0,"blah") == 1' file
awk 'substr($0,1,4) == "blah"' file

=
是字符串比较运算符,
~
是regexp比较运算符。您的代码正在使用字符串比较(
==
),但试图在其中使用regexp元字符(
*
*

这两个选项中的任何一个都将打印以
开头的每一行。它们正在进行regexp比较:

awk '/^blah/' file
awk '$0 ~ /^blah/' file
awk 'match($0,/^blah/)' file
awk 'match($0,/blah/) == 1' file
awk 'index($0,"blah") == 1' file
awk 'substr($0,1,4) == "blah"' file
在执行字符串比较时:

awk '/^blah/' file
awk '$0 ~ /^blah/' file
awk 'match($0,/^blah/)' file
awk 'match($0,/blah/) == 1' file
awk 'index($0,"blah") == 1' file
awk 'substr($0,1,4) == "blah"' file

我试过下面的命令,也能用

cat teste.tsv | awk -F "_" '{if($1 == "blah"){print $0}}'

我试过下面的命令,也能用

cat teste.tsv | awk -F "_" '{if($1 == "blah"){print $0}}'

工作正常,但是否有可能使用*?我还是编程新手,我觉得使用这种逻辑更容易理解。@PedroHenrique,你可以试试
awk'/^blah.*/'Input_file
?它将查找以blah开头的行,然后匹配blah后面的任何行。虽然我的regex
^blah
也会检查相同的行是否从它开始,但请告诉我这是否对您有帮助?我现在可以更好地理解了。但我对您的代码有疑问,您如何判断谁是列分隔符?在我的代码中,我使用了-F“”。谢谢lot@PedroHenrique,默认情况下,awk的字段分隔符是空格,因此我为所有带有
FS=“\u”
的行提供了将字段分隔符设置为
,您可以按-F或按FS选项设置字段分隔符。如果还有任何疑问,请让我知道。工作正常,但是否有可能使用*?我还是编程新手,我觉得使用这种逻辑更容易理解。@PedroHenrique,你可以试试
awk'/^blah.*/'Input_file
?它将查找以blah开头的行,然后匹配blah后面的任何行。虽然我的regex
^blah
也会检查相同的行是否从它开始,但请告诉我这是否对您有帮助?我现在可以更好地理解了。但我对您的代码有疑问,您如何判断谁是列分隔符?在我的代码中,我使用了-F“”。谢谢lot@PedroHenrique,默认情况下,awk的字段分隔符是空格,因此我为所有带有
FS=“\u”
的行提供了将字段分隔符设置为
,您可以按-F或按FS选项设置字段分隔符。如果还有任何疑问,请告诉我。谢谢你,但是你能解释一下索引和==1是什么意思吗?我对你的代码还有另一个疑问,你怎么知道谁是列分隔符?在我的代码中,我使用了-F“”。感谢您在awk手册页中查找
index()
,以回答您的第一个问题。英语的共同点-你所拥有的不是“怀疑”,而是“问题”-“怀疑”是当你不相信某件事时所拥有的,而不是当你只是想了解更多有关某件事的信息时所拥有的。我没有指定字段分隔符,因为我没有使用它-您希望测试以
blah
开头的行,因此不需要为此进行任何字段拆分<代码>“
已经是默认的字段分隔符(
FS
)值。顺便说一句,您不需要将其设置为该值。非常感谢您的解释。它们对我的学习非常有价值。谢谢你,但是你能解释一下指数和==1是什么意思吗?我对你的代码还有另一个疑问,你怎么知道谁是列分隔符?在我的代码中,我使用了-F“”。感谢您在awk手册页中查找
index()
,以回答您的第一个问题。英语的共同点-你所拥有的不是“怀疑”,而是“问题”-“怀疑”是当你不相信某件事时所拥有的,而不是当你只是想了解更多有关某件事的信息时所拥有的。我没有指定字段分隔符,因为我没有使用它-您希望测试以
blah
开头的行,因此不需要为此进行任何字段拆分<代码>“
已经是默认的字段分隔符(
FS
)值。顺便说一句,您不需要将其设置为该值。非常感谢您的解释。它们对我的学习非常有价值。“作品”是一个有趣的术语:-)。是的,它将产生输出y