我有一堆文档,它们在不同位置都有行Account number: 123456789
。使用awk在分隔符后仅查找字符串的第一个匹配项
我需要做的是能够解析文件,并找到帐号本身。因此,awk
需要查找Account number:
,并立即返回字符串。
例如,如果它是:
Account number: 1234567
awk
应该返回:
1234567
一旦它找到的第一次出现可以停止寻找。
但是,我很难过。使用awk
做正确的方法是什么?
我有一堆文档,它们在不同位置都有行Account number: 123456789
。使用awk在分隔符后仅查找字符串的第一个匹配项
我需要做的是能够解析文件,并找到帐号本身。因此,awk
需要查找Account number:
,并立即返回字符串。
例如,如果它是:
Account number: 1234567
awk
应该返回:
1234567
一旦它找到的第一次出现可以停止寻找。
但是,我很难过。使用awk
做正确的方法是什么?
方式一:
awk -F: '$1=="Account number"{print $2;exit;}' file
我假设你想阻止你查找文件中第一次出现的时刻。如果您想在文件的每一行中查找出现的内容,只需删除exit
即可。
您可以使用if
来检查$1
和$2
是否等于“Account”和“number:”。如果他们这样做,然后打印$3
:
> awk '{if ($1 == "Account" && $2 == "number:") {print $3; exit;}}' input.txt
你也使用sed -n s///p
:
sed -En 's/^Account number: (.+)/\1/p' *.txt | head -n1
对于这样的匹配问题我更喜欢使用grep
与向后看:
grep -Po '(?<=Account number:)\d+' file
或
grep -Po 'Account number: \K\d+' file
这是说:打印任何序列出现在字符串后面的数字(\d+
)。
在第二种情况下,\K
会清除匹配的字符串,以便在\K
之后开始打印。
看到它在行动给出一个文件file
:
Account number: 1234567
but then another Account number: 789
and that's all
让我们看看输出的样子:
$ grep -Po '(?<=Account number:)\d+' file
1234567
789
我究竟该怎么做? – DrDavid 2013-03-11 04:39:06
添加示例.. – 2013-03-11 04:39:56
为什么多加'{}'?为什么不只是'awk'$ 1 ==“Account”&& $ 2 ==“number:”{print $ 3;退出}'input.txt'? – tianon 2014-02-06 00:48:28