簡體   English   中英

AWK匹配以數字開頭的字符串

[英]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.

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