gpt4 book ai didi

sed - 从巨大的文本文件中剥离文本 block

转载 作者:行者123 更新时间:2023-12-04 14:49:31 25 4
gpt4 key购买 nike

我的任务很痛苦,我想知道是否有人可以提供帮助。

我们的供应商提供了一个 SNMP mib 文件 (txt)。不幸的是,这个文件中有很多已经过时了,需要删除以供我们的监控应用程序使用。

我一直在尝试手动执行此操作,但它的长度超过 800,000 行,这削弱了我的生存意志。

结构类似于:

-- /*********************************************************************************/
-- /* MIB table for Hardware */
-- /* Valid from: 543.44 */
-- /* Deprecated from: 600.3 */
-- /*********************************************************************************/

Some text
some text
Some text

-- /*********************************************************************************/
-- /* MIB table for Hardware */
-- /* Valid from: 543.44 */
-- /*********************************************************************************/

Some text
some text
Some text

-- /*********************************************************************************/
-- /* MIB table for Hardware */
-- /* Valid from: 364.44 */
-- /* Deprecated from: 594.3 */
-- /*********************************************************************************/

随机重复,令人作呕

我在想的是一个脚本,它会:

找到文本“已弃用”
然后
delete that line, 
delete the preceding 3 lines,
delete the following one line,
delete then all following lines until the next
"-- /*********************************************************************************/"

这有意义吗?这种事情有可能吗,还是我只是在做梦?

谢谢!

最佳答案

编辑:我刚刚意识到我读错了你的问题,即使在被点赞了几次之后也是如此。我之前的回复被关闭了!现在应该更正确了,但有一些 附加假设 .简单的解决方案只能让您走到这一步!

这可能会帮助你,有一些假设:

cat -s data | awk -vFS='\n' -vRS='\n\n' '/Deprecated from/ { getline; next } 1'
cat命令只是为了挤出多余的换行符,所以 awk可以更轻松地操作。至于 awk , -vFS='\n'告诉它字段由换行符分隔,和 -vRS='\n\n'告诉它记录由一行中的两个换行符分隔。然后 /Deprecated from/查找具有该文本的记录,然后 { getline; next }读入其后的下一条记录,并使其继续前进。 1是打印到达以下点的行的快捷方式。

这将假设以下 :
  • 所有注释和文本块在任一侧至少用一个空行分隔
  • 只有评论块和文本块均匀穿插
  • 文本块内没有空行

  • 所以它对你来说可能并不完美。如果这些假设没问题,那就是 awk这项工作的一个不错的选择,如您所见:脚本很小!
    $ cat -s data | awk -vFS='\n' -vRS='\n\n' '/Deprecated from/ { getline; next } 1'
    -- /*********************************************************************************/
    -- /* MIB table for Hardware */
    -- /* Valid from: 543.44 */
    -- /*********************************************************************************/
    Some text
    some text
    Some text

    此外,如您所见,剩余的换行符会被推出。为此,您可以像这样修改命令:
    $ cat -s data | awk -vFS='\n' -vRS='\n\n' '/Deprecated from/ { getline; next } { printf "%s\n\n", $0 }'
    -- /*********************************************************************************/
    -- /* MIB table for Hardware */
    -- /* Valid from: 543.44 */
    -- /*********************************************************************************/

    Some text
    some text
    Some text

    关于sed - 从巨大的文本文件中剥离文本 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9089283/

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