簡體   English   中英

使用awk在文件中的字符串內找到可變長度的數字?

[英]Find a variable length number inside a string from a file using awk?

我在UNIX上有很多文件,希望在該文件中獲取與指定模式相關的編號。

大部分文件將在文件中具有唯一的模式,如下所示

some text abc
some text abc
some text abc
(3 rows)

我只想使用awk打印數字3

該數字可能因文件而異,可能是35644或任何數字值。

我想使用awk not sed或grep查找該數字,因為HP UNIX不支持高級sed / grep功能。

以下內容對您有用嗎?

sed -e 's/(\([0-9][0-9]*\) rows)/\1/;t;d'

如果(N rows)N替換成功,則t轉到腳本的末尾,否則, d刪除該行(即,將跳過不包含該表達式的所有行)。

由於您不希望(或不能)使用簡單的sed方法,因此這是awk解決方案:

輸入文件樣本:

$ head file[123]
==> file1 <==
some text abc
some text abc
some text abc
(3 rows)

==> file2 <==
some text abc
some text abc
some text abc
some text abc
some text abc
(5 rows)

==> file3 <==
some text abc
some text abc
(2 rows)

$ for f in file[123]; do awk 'END{ print FILENAME, substr($1, 2) }' "$f"; done
file1 3
file2 5
file3 2

sed解決方案(在我的變體中)將如下所示:

for f in file[123]; do echo -n "$f "; sed -n '$ s/[() ]\|rows//gp' "$f"; done

也許與此awk

awk -v RS='(' 'END{print $1}' infile

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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