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
    清除匹配缓冲区
  • \d{4,}$
    匹配4个或更多数字,直到字符串结束
输出

1623222654527
1623222654679
1623222654744

或使用
sed

sed -nE 's/.*_([0-9]{4,})$/\1/p' file
  • -E
    扩展正则表达式
  • -n
    禁止自动打印
  • /p
    打印行
输出

1623222654527
1623222654679
1623222654744