我有一堆文件,Account number: 123456789
在不同的位置都有一行。
我需要做的是能够解析文件,并找到帐号本身。因此,awk
需要查找Account number:
并返回紧随其后的字符串。
例如,如果它是:
Account number: 1234567
awk
应该返回:
1234567
一旦找到第一次出现,它就可以停止查找。
但是,我难住了。这样做的正确方法是什么awk
?
单程:
awk -F: '$1=="Account number"{print $2;exit;}' file
我假设您想在文件中找到第一次出现的那一刻停止。如果您想在文件的每一行中查找匹配项,只需删除exit
.
您可以使用 anif
检查是否等于“Account”和“number:” $1
。$2
如果他们这样做,那么打印$3
:
> awk '{if ($1 == "Account" && $2 == "number:") {print $3; exit;}}' input.txt
接受的答案在字符串前面输出一个空格,这迫使我使用另一种方法:
awk '/Account number/{print $3; exit}'
这个解决方案忽略了:
分隔符,但就像一个魅力,更容易记住 IMO。
对于这样的匹配,我更喜欢使用grep
look-behind:
grep -Po '(?<=Account number: )\d+' file
或者
grep -Po 'Account number: \K\d+' file
\d+
这表示:打印出现在字符串之后的任何数字序列 ( ) Account number:
。
在第二种情况下,\K
清除匹配的字符串,以便在这样之后开始打印\K
。
在给定文件的情况下查看它file
:
Account number: 1234567
but then another Account number: 789
and that's all
让我们看看输出的样子:
$ grep -Po '(?<=Account number: )\d+' file
1234567
789
你也可以使用sed -n s///p
:
sed -En 's/^Account number: (.+)/\1/p' *.txt | head -n1