gpt4 book ai didi

regex - 将文本文件中的匹配行组合在一起

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:47 25 4
gpt4 key购买 nike

我有一个输入文件:

XYZ_001
XYZ_005
XYZ_010
ABC_001
ABC_010

我想将这些行分组为:

XYZ,XYZ_001,XYZ_005,XYZ_010
ABC,ABC_001,ABC_010

我试过对文件进行排序并过滤掉最后四个字符,但我不知道如何将它们组合在一起。基本上,我需要将匹配正则表达式的行组合在一起。我的输入文件已排序。

我的文件很大。我不能吞下整个文件。

最佳答案

使用 perl 一行代码

perl -0777 -pe 's/^([^_]+_).*\K\n(?=\1)/,/mg; s/^([^_]*)\K/,$1/mg;' file

如果 slurping 不是一个选项,那么这个较长形式的逻辑将起作用:

perl -ne '
chomp;
($h) = /([^_]*)/;
if ($l ne $h) {print "\n" if defined $l; $l = $h; print "$l"}
print ",$_";
}{
print "\n"
' file

说明:

开关:

  • -0777 : 吞掉整个文件
  • -p : 创建一个 while(<>){...; print}循环输入文件中的每一行。
  • -e : 告诉perl在命令行上执行代码。

代码:

  • s/^([^_]+_).*\K\n(?=\1)/,/mg : 分组相关相邻行:XYZ_001,XYZ_005,XYZ_010
  • s/^([^_]*)\K/,$1/mg :添加组前缀:XYZ,XYZ_001,XYZ_005,XYZ_010

关于regex - 将文本文件中的匹配行组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24440095/

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