![](/img/trans.png)
[英]BASH escape less than < with variables in frontoff with awk, need variable and < to search
[英]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 '$1 <= 4 {print $1}' inputfile
我希望得到的:
John
Jane
Mark
Bill
到目前為止,我一無所獲。 它要么打印出所有內容,沒有長度限制,要么根本不打印任何內容。 有人可以看看這個並看看他們的想法嗎? 謝謝
首先,讓我們了解為什么
awk '$1 <= 4 {print $1}' inputfile
給你整個inputfile
, $1 <= 4
是數字比較,所以這個提示 GNU AWK
嘗試將第一列值轉換為數值,但是 say 的數值是多少
John
? 正如 GNU AWK
手冊 Strings And Numbers所說
通過將字符串的任何數字前綴解釋為數字 (...) 將字符串轉換為數字,不能解釋為有效數字的字符串將轉換為零。
因此,從 GNU AWK
的角度來看, John
的數值為零。
為了獲得所需的 output,您可以使用length
function,它返回的字符數如下
awk 'length($1)<=4{print $1}' inputfile
或者從 0 到 4 個字符的模式匹配
awk '$1~/^.{0,4}$/{print $1}' inputfile
其中$1~
表示檢查第一個字段是否匹配, .
表示任何字符, {0,4}
從 0 到 4 次重復, ^
字符串開頭, $
字符串結尾(這 2 個是必需的,否則它也會匹配更長的字符串,因為它們確實包含 substring .{0,4}
)
輸入文件的兩個代碼
John Doe
Jane Doe
Mark Smith
Abigail Smith
Bill Adams
給output
John
Jane
Mark
Bill
(在 gawk 4.2.1 中測試)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.