【问题标题】:Split every second occurrence of delimiter每出现一次分隔符就拆分一次
【发布时间】:2019-02-08 19:54:18
【问题描述】:

我尝试使用 awk 每隔两次出现分隔符就拆分文件,但我总是在开头得到一个空文件,我不明白为什么。

我需要在多个文件中分解的数据格式类似于:

----------
aaa
bbb
----------
ccc
ddd
----------
eee
fff
----------
ggg  

第一个结果文件应包含:

----------
aaa
bbb
----------
ccc
ddd

分隔符始终相同(10 倍“减号”)。
我现在正在尝试这样做:

awk -v RS='[-]{10}' '{i++} {file = sprintf("temp-%s", int(i/2)); print >> file;}'

然而,我得到的第一个文件 (temp-0) 总是包含一个空行,没有其他内容。
此外,源文件不是以空行开头,其内容中也没有任何内容(它们之前已被删除)。

有人可以帮忙吗?

【问题讨论】:

  • 如果将a,b,c, 作为分隔符拆分,第一个字段值是多少?它将是a ...,b,c 怎么样?第一个字段将为空...与记录分隔符相同的概念..您得到空文件,因为在第一个匹配之前没有任何内容

标签: linux awk split


【解决方案1】:

对于这个问题,我不会使用RS。您可以计算--------- 来决定是否必须增加文件索引。试试这条线:

awk '/^--*$/{c++;f+=c%2?1:0}{print > "temp-"f}' file

请注意,上面的行让您了解如何处理行和文件索引。如果你的文件很大,你需要close()文件并使用>>重新重定向,否则你会得到too many opened files这样的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2019-01-06
    • 2017-09-08
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多