FreezeJ' Blog

AWK 知识与技巧

2020-04-14

AWK 知识与技巧

使用match匹配关键字并且输出匹配内容

命令

cat wget-list-USTC.row | grep -v '^$' |  awk '{match($0,/<a href="(.+)">/,a); print "http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/"a[1]}' > wget-list

实际例子

cat wget-list-USTC.row | head
<a href="Python-3.8.1.tar.xz">Python-3.8.1.tar.xz</a>                                18-Dec-2019 21:30            17828408
<a href="XML-Parser-2.46.tar.gz">XML-Parser-2.46.tar.gz</a>                             24-Sep-2019 05:29              254763
<a href="acl-2.2.53.tar.gz">acl-2.2.53.tar.gz</a>                                  16-Aug-2018 16:36              524300
<a href="attr-2.4.48.tar.gz">attr-2.4.48.tar.gz</a>                                 16-Aug-2018 16:36              467840
<a href="autoconf-2.69.tar.xz">autoconf-2.69.tar.xz</a>                               16-Aug-2018 16:36             1214744
<a href="automake-1.16.1.tar.xz">automake-1.16.1.tar.xz</a>                             16-Aug-2018 16:36             1534936
<a href="bash-5.0-upstream_fixes-1.patch">bash-5.0-upstream_fixes-1.patch</a>                    01-Dec-2019 16:25               21672
<a href="bash-5.0.tar.gz">bash-5.0.tar.gz</a>                                    07-Jan-2019 14:13            10135110
<a href="bc-2.5.3.tar.gz">bc-2.5.3.tar.gz</a>                                    01-Feb-2020 16:02              252149
<a href="binutils-2.34.tar.xz">binutils-2.34.tar.xz</a>                               01-Feb-2020 12:24            21637796

cat wget-list-USTC.row | grep -v '^$' |  awk '{match($0,/<a href="(.+)">/,a); print "http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/"a[1]}' > wget-list

cat wget-list | head
http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/Python-3.8.1.tar.xz
http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/XML-Parser-2.46.tar.gz
http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/acl-2.2.53.tar.gz
http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/attr-2.4.48.tar.gz
http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/autoconf-2.69.tar.xz
http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/automake-1.16.1.tar.xz
http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/bash-5.0-upstream_fixes-1.patch
http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/bash-5.0.tar.gz
http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/bc-2.5.3.tar.gz
http://mirrors.ustc.edu.cn/lfs/lfs-packages/9.1/binutils-2.34.tar.xz

解析

match($0,/<a href="(.+)">/,a) match函数接收3个参数,第一个为输入,$0表示整行数据。第二个参数为正则匹配,参数内括号匹配到的内容按顺序保存到第三个参数命名的列表中,该例子为a,使用a[1]调用第一个括号匹配的内容,a[2]第二个括号内容,以此类推。

Tags: Linux