gpt4 book ai didi

regex - 压缩文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:34 25 4
gpt4 key购买 nike

我有一个很大的日志文件,超过 100 万行。我需要使用正则表达式来查找模式,然后开始大嚼特嚼,直到找到另一个正则表达式。所以我最终会得到大约 1500 行。

我知道 sed 允许使用正则表达式,但它可以拆分文件吗?我没有使用 awk 的经验,但我认为这应该能让我做我需要做的事。不过,我对阅读联机帮助页感到困惑……我会提供一些示例或更简单的解决方案。

最佳答案

在 AWK 和 SED 中,您都可以像这样定义 RegEx -

AWK:在 AWK 中,您会注意到我们没有写 print任何地方。在 AWK 中(基于模式/ Action 语句,只要模式语句为真,打印就是默认 Action 。因此在下面的情况下,只要 RegEx 模式为真,AWK 就会为我们打印它。

awk '/regex1/,/regex2/' INPUT_FILE > NEW_FILE

SED:在 SED 中,我们使用 -n 选项来抑制打印所有内容的默认行为,并将正则表达式与 p 结合使用告诉 SED 打印特定行。

sed -n '/regex1/,/regex2/p' INPUT_FILE > NEW_FILE

或者,你也可以给出下面的一行

sed '/regex1/,/regex2/!d' INPUT_FILE > NEW_FILE

使用重定向运算符 >您可以创建文件的一个子集。

在 AWK 中拆分文件,如果您知道文件中的记录数 (wc -l < INPUT_FILE),那么您可以这样写 -

awk 'NR==2,NR==5' INPUT_FILE

NR 是 AWK 的内置变量,它被设置为记录的行号。所以如果你有一个 1500 行的文件并且只需要前 750 行,那么你可以这样做 -

awk 'NR==1,NR==750' INPUT_FILE

如前所述,您可以但不必提及 print使用 AWK。只要您的模式是正确的,它就会为您完成。

尽管您的文件中有一百万行,这将是一个很大的痛苦。所以下面的 AWK 单行代码应该可以解决问题。

awk '{print >("SMALL_BATCH_OF_FILES_" int((NR+2)/3))}' BIG_INPUT_FILE

这一行将创建 SMALL_BATCH_OF_FILES_,每行包含 3 行。您可以将其设置为您的舒适度。 (NR+2/3)

执行:

[jaypal~/Temp]$ cat BIG_INPUT_FILE 
1
2
3
4
5
6
7
8
9
10

[jaypal~/Temp]$ awk '{print >("SMALL_BATCH_OF_FILES_" int((NR+2)/3))}' BIG_INPUT_FILE

[jaypal~/Temp]$ ls -lrt SMALL*
-rw-r--r-- 1 jaypalsingh staff 3 25 Nov 10:41 SMALL_BATCH_OF_FILES_4
-rw-r--r-- 1 jaypalsingh staff 6 25 Nov 10:41 SMALL_BATCH_OF_FILES_3
-rw-r--r-- 1 jaypalsingh staff 6 25 Nov 10:41 SMALL_BATCH_OF_FILES_2
-rw-r--r-- 1 jaypalsingh staff 6 25 Nov 10:41 SMALL_BATCH_OF_FILES_1

[jaypal~/Temp]$ cat SMALL_BATCH_OF_FILES_1
1
2
3
[jaypal~/Temp]$ cat SMALL_BATCH_OF_FILES_2
4
5
6
[jaypal~/Temp]$ cat SMALL_BATCH_OF_FILES_3
7
8
9
[jaypal~/Temp]$ cat SMALL_BATCH_OF_FILES_4
10

关于regex - 压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8271539/

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