我有很多文件都在各个地方都有Account number: 123456789
行。
我需要做的是能够解析文件,并找到帐号本身。因此,awk
需要查找Account number:
并紧接着返回字符串。
例如,如果是:
Account number: 1234567
awk
应该返回:
1234567
一旦发现第一次出现,它就会停止查看。
但是,我很难过。使用awk
?
答案 0 :(得分:39)
一种方式:
awk -F: '$1=="Account number"{print $2;exit;}' file
我假设您想要在文件中找到第一个出现的那一刻停止。如果要在文件的每一行中查找事件,只需删除exit
。
答案 1 :(得分:6)
您可以使用if
检查$1
和$2
是否等于“帐户”和“数字:”。如果有,请打印$3
:
> awk '{if ($1 == "Account" && $2 == "number:") {print $3; exit;}}' input.txt
答案 2 :(得分:3)
对于这样的匹配,我更喜欢使用grep
与后视:
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
答案 3 :(得分:1)
您也可以使用sed -n s///p
:
sed -En 's/^Account number: (.+)/\1/p' *.txt | head -n1
答案 4 :(得分:1)
被接受的答案在字符串前面输出一个空格,这迫使我使用另一种方法:
awk '/Account number/{print $3; exit}'
此解决方案忽略了:
分隔符,但它就像一个超级按钮,并且更容易记住IMO。