在 awk 中打印第一个变量,但前提是它小于 X
Printing First Variable in Awk but Only If It's Less than X
我有一个包含文字的文件,我只需要打印少于或等于 4 个字符的行,但我的代码遇到了问题。行尾还有其他文字,但我在这里将其缩短。
文件:
John Doe
Jane Doe
Mark Smith
Abigail Smith
Bill Adams
我想做的是打印少于 4 个字符的名字。
我尝试过的:
awk ' <= 4 {print }' inputfile
我希望得到的:
John
Jane
Mark
Bill
到目前为止,我一无所获。它要么打印出所有内容,没有长度限制,要么根本不打印任何内容。有人可以看看这个并看看他们的想法吗?
谢谢
首先,让我们明白为什么
awk ' <= 4 {print }' inputfile
给你整个inputfile
, <= 4
是数字比较,所以这提示GNU AWK
尝试将第一列值转换为数值,但是什么是数值
John
?正如 GNU AWK
manual Strings And Numbers 所说
A string is converted to a number by interpreting any numeric prefix
of the string as numerals(...)Strings that can’t be interpreted as
valid numbers convert to zero.
因此,从 GNU AWK
的角度来看,John
的数值为零。
为了获得所需的输出,您可以使用 length
函数,其中 returns 个字符如下
awk 'length()<=4{print }' inputfile
或者从 0 到 4 个字符的模式匹配
awk '~/^.{0,4}$/{print }' inputfile
其中 ~
表示检查第一个字段是否匹配,.
表示任何字符,{0,4}
从 0 到 4 次重复,^
字符串开头,$
字符串结尾(这 2 个是必需的,否则它也会匹配更长的字符串,因为它们确实包含子字符串 .{0,4}
)
输入文件的两个代码
John Doe
Jane Doe
Mark Smith
Abigail Smith
Bill Adams
给出输出
John
Jane
Mark
Bill
(在 gawk 4.2.1 中测试)
我有一个包含文字的文件,我只需要打印少于或等于 4 个字符的行,但我的代码遇到了问题。行尾还有其他文字,但我在这里将其缩短。
文件:
John Doe
Jane Doe
Mark Smith
Abigail Smith
Bill Adams
我想做的是打印少于 4 个字符的名字。
我尝试过的:
awk ' <= 4 {print }' inputfile
我希望得到的:
John
Jane
Mark
Bill
到目前为止,我一无所获。它要么打印出所有内容,没有长度限制,要么根本不打印任何内容。有人可以看看这个并看看他们的想法吗? 谢谢
首先,让我们明白为什么
awk ' <= 4 {print }' inputfile
给你整个inputfile
, <= 4
是数字比较,所以这提示GNU AWK
尝试将第一列值转换为数值,但是什么是数值
John
?正如 GNU AWK
manual Strings And Numbers 所说
A string is converted to a number by interpreting any numeric prefix of the string as numerals(...)Strings that can’t be interpreted as valid numbers convert to zero.
因此,从 GNU AWK
的角度来看,John
的数值为零。
为了获得所需的输出,您可以使用 length
函数,其中 returns 个字符如下
awk 'length()<=4{print }' inputfile
或者从 0 到 4 个字符的模式匹配
awk '~/^.{0,4}$/{print }' inputfile
其中 ~
表示检查第一个字段是否匹配,.
表示任何字符,{0,4}
从 0 到 4 次重复,^
字符串开头,$
字符串结尾(这 2 个是必需的,否则它也会匹配更长的字符串,因为它们确实包含子字符串 .{0,4}
)
输入文件的两个代码
John Doe
Jane Doe
Mark Smith
Abigail Smith
Bill Adams
给出输出
John
Jane
Mark
Bill
(在 gawk 4.2.1 中测试)