[英]AWK to match strings beginning with a number
我想打印文件的所有行,其中每行的第一個元素以數字開頭,使用awk
。 以下是使用的文件和命令中包含的數據的詳細信息:
文件名內容:
12.44.4444goad ABCDEF/END
LMNOP/START joker
98.0 kites
使用的命令:
awk '{ $1 ~ /^\d[a-zA-Z0-9]*/ }' filename
運行上述命令后,提示中不顯示任何結果。 如果需要對上述命令進行任何更正,請告訴我。
要打印以數字開頭的行,您可以嘗試以下操作:
awk '/^[[:digit:]]+/' file
正如@HenkLangeveld指出的那樣,你的語法是不正確的。 此外,正則表達式\\d
在awk中不可用。
如果你只需要在行的開頭匹配至少一個數字,你需要的只是^
來匹配行的開頭而[0-9]
匹配一個數字。
您可以將大括號與if
語句一起使用:
awk '{if($1 ~ /^[0-9]/) print $0}' filename
但這只是為此:
awk '$1 ~ /^[0-9]/' filename
放下大括號和\\d
,像這樣:
awk ' $1 ~ /^[0-9]/ ' filename
Awk程序是大塊的。 塊是pattern
block
對,其中block
默認為{ print }
。 (空模式默認為true 。)
/\\d/
是一個perl-ism,可能在某些版本的awk
- 而不是那些我嘗試過的版本*。 您需要傳統的 /^[0-9]/
或POSIX /^[[:digit:]]/
符號。
* gnu和ast
從您嘗試的解決方案,它看起來像你想要的:
awk 'NF>1 && $1 ~ /^[0-9.]*$/' filename
你需要明確地匹配.
如果你想包含小數點,你需要$
anchor來使*
有意義。 這將錯過第一列看起來像5e39
或-2.3
。 您可以嘗試通過以下方式捕獲這些案例:
awk 'NF>1 && $1 ~ /^-?[0-9.]*(e[0-9*])?$/' filename
但在這一點上,我會告訴你使用perl
並停止嘗試使用awk
更強大。 也許(這將打印空行......不確定您想要的行為):
perl -lane 'use POSIX qw(strtod); my ($num, $end) = strtod($F[0]);
print unless $end;' filename
這使用strtod來解析數字,並告訴你字符串末尾不屬於它的字符數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.