gpt4 book ai didi

linux - 遇到特殊字符时将文件拆分为多个

转载 作者:太空狗 更新时间:2023-10-29 11:12:15 27 4
gpt4 key购买 nike

我有一个主文件如下:

/* ------------- AAAAAAAA ------------- */
some
lines
here
/* ------------- BBBBBBBB ------------- */
more
things
/* ------------- CCCCCCCC ------------- */
there
a
few
more
lines

我的最终目标是创建一个文件,该文件将只包含包含特定字符串的 block ,例如,如果该字符串是 lines 那么我将有一个这样的输出文件:

/* ------------- AAAAAAAA ------------- */
some
lines
here
/* ------------- CCCCCCCC ------------- */
there
a
few
more
lines

为了达到我的目标,我首先尝试通过 bock 将我的主文件拆分为子文件以获得类似的东西

  • 文件-1
  • 文件-2
  • 文件-3

然后我计划检查每个文件,如果包含搜索到的字符串,那么我将它们追加回我的新主文件。

老实说,我不知道这是否是最好的方法,而且我的主文件中有 30139 行的 1600 多个 block ,因此需要解析的内容很多。

但是,如果我继续这样做,我的代码仍然有问题:

#!/bin/ksh
i=0
while IFS=\| read -r "line"; do
if [ `echo $line | grep '/* ------' | wc -l` -eq 1 ]; then
i=$((i+1))
fi
echo $line > "file-$i"
done < $1

由于每个 block 都由 /* -------- 分隔,如果我执行 echo $line,输出将是我的根目录 ( /etc/tmp 等)而不是 $line 本身。

所以我知道这是一个有 2 个问题的帖子,但是因为可以使用不同的方式执行脚本来绕过第二个问题,所以它肯定是有关联的。

编辑:

解决方案必须在 korn shell 中,因为我无法在这台机器上安装任何东西

最佳答案

awk 中的另一个:

$ awk '
function dump() { # define a function to avoid duplicate code in END
if(b~/lines/) # if buffer has "lines" in it
print b # output and ...
b="" } # reset buffer
/^\/\*/ { dump() } # at the start of a new block dump existing buffer
{ b=b (b==""?"":ORS) $0 } # gather buffer
END{ dump() } # dump the last buffer also
' file
/* ------------- AAAAAAAA ------------- */
some
lines
here
/* ------------- CCCCCCCC ------------- */
there
a
few
more
lines

关于linux - 遇到特殊字符时将文件拆分为多个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46443372/

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