linux中的AWK问题
我有以下文件(teste.tsv): 我必须只打印teste.tsv文件中带有单词“blah”的行 我做了一个命令行: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 '
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