簡體   English   中英

打印 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 '$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM