gpt4 book ai didi

sed - AWK - 具有不相等字段的过滤器文件

转载 作者:行者123 更新时间:2023-12-05 01:26:54 25 4
gpt4 key购买 nike

我一直在尝试从文件中的一行中提取一个字段,尽管每行可能有正负 2 或 3 个字段。它们在每行的字段数上并不总是相等的。

这是一个片段:

A        orarpp 45286124        1     1   0 20  60   Nov 25  9-16:42:32    01:04:58 11176 117056      0   - oracleXXX (LOCAL=NO)
A orarpp 45351560 1 1 3 20 61 Nov 30 5-03:54:42 02:24:48 4804 110684 0 - ora_w002_XXX
A orarpp 45548236 1 1 22 20 71 Nov 26 8-19:36:28 00:56:18 10628 116508 0 - oracleXXX (LOCAL=NO)
A orarpp 45679190 1 1 0 20 60 Nov 28 6-23:42:20 00:37:59 10232 116112 0 - oracleXXX (LOCAL=NO)
A orarpp 45744808 1 1 0 20 60 10:52:19 23:08:12 00:04:58 11740 117620 0 - oracleXXX (LOCAL=NO)
A root 45810380 1 1 0 -- 39 Nov 25 9-19:54:34 00:00:00 448 448 0 - garbage

对于第一行,我对 9-16:42:32 和每一行的类似字段感兴趣。

我尝试通过使用“:”作为字段分隔符来提取它,然后从那里进行过滤,但是,我想要完成的是如果破折号之前的数字(在示例中为 9)是大于一。

cat file.txt | grep oracle | awk -F: '{print substr($1, length($1)-5)}'

这是因为我需要的实际字段两侧的字段数可能因行而异。

绝对不是最有效的,但我一直在尝试使用 awk one liner 来做到这一点。

如果能给我提示或指示,我将不胜感激。我不反对用比 awk 更好的方式来做。

谢谢。

最佳答案

也许 cut 是这项工作的正确工具?例如,使用您的代码段:

$ cut -c 62-71 file.txt
9-16:42:32
5-03:54:42
8-19:36:28
6-23:42:20
23:08:12
9-19:54:34

参数告诉 cut 剪切列 (-c) 62 到 71。

对于额外的处理,您可以将其通过管道传输到 awk

您还可以通过接受整行然后使用 substr 提取所需的列来在 awk 中完成整个操作。例如,此 awk 命令产生与上面的 cut 命令相同的输出:

awk '{ print substr($0, 62, 10) }' file.txt

是创建管道还是完全在 awk 中进行处理至少部分取决于个人品味/风格。

关于sed - AWK - 具有不相等字段的过滤器文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20410682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com