awk+;如何获取文件中的最新数字,但将数字排除在4位之前
我们有如下文件awk+;如何获取文件中的最新数字,但将数字排除在4位之前,awk,sed,Awk,Sed,我们有如下文件 更多文件 虽然我需要取最后的数字,但如果数字包含1-3位,则排除 预期结果应是: 1623222654527 1623222654679 1623222654744 1623222654527 1623222654679 1623222654744 因此,到目前为止,我的方法是 sed s'/_/ /g' file | awk '{print $NF}' 但它的印刷品 1623222654527 1623222654679 1623222654744 69 66 65
更多文件
虽然我需要取最后的数字,但如果数字包含1-3位,则排除
预期结果应是:
1623222654527
1623222654679
1623222654744
1623222654527
1623222654679
1623222654744
因此,到目前为止,我的方法是
sed s'/_/ /g' file | awk '{print $NF}'
但它的印刷品
1623222654527
1623222654679
1623222654744
69
66
65
65
如何改进语法以排除最新的1位、2位或3位数字
所以我们得到这样的输出
1623222654527
1623222654679
1623222654744
像这样
$ awk -F_ 'length($NF)>3{print $NF}' file
输出:
1623222654527
1623222654679
1623222654744
使用
\uu
作为字段分隔符,如果最后一个字段$NF
的长度大于3,则输出最后一个字段。使用grep
:
$grep-oE'[0-9]{4,}$'ip.txt
1623222654527
1623222654679
1623222654744
如果存在下划线,则对与Perl兼容的正则表达式使用gnu grep
和-p
:
grep -oP ".*_\K\d{4,}$" file
模式匹配:
匹配到最后一个下划线*.
清除匹配缓冲区\K
匹配4个或更多数字,直到字符串结束\d{4,}$
1623222654527
1623222654679
1623222654744
或使用
sed
sed -nE 's/.*_([0-9]{4,})$/\1/p' file
扩展正则表达式-E
禁止自动打印-n
打印行/p
1623222654527
1623222654679
1623222654744