【问题标题】:Shellscript - read blockwiseShellscript - 逐块读取
【发布时间】:2015-05-11 21:58:47
【问题描述】:

我想知道是否可以逐块读取文件直到特定分隔符(即某个字符串或其他内容),而不是逐行读取(就像“读取”那样)。

input.txt 包含:

text1
text2
NEXT
text3
NEXT
text4
text5

每个文本部分都应该保存在一个特定的文件中(text1+text2 // text3 // text4+text5)

我在编辑 IFS 时玩了一会儿,但不幸的是没有成功。

【问题讨论】:

    标签: linux bash shell awk


    【解决方案1】:

    您可以将gnu-awk 与自定义记录分隔符一起使用:

    awk -v RS='\nNEXT\n' '{sub(/\n$/, ""); print "<" $0 ">"}' file
    <text1
    text2>
    <text3>
    <text4
    text5>
    

    &lt;...&gt; 中的每个块都是一条记录。

    【讨论】:

    • 您好,感谢您的第一次帮助!有没有更简单的方法来实现这一点?以及如何将每条记录保存到单个文件中?
    • 例如你可以使用:awk -v RS='\nNEXT\n' '{sub(/\n$/, ""); print $0 &gt; "file" NR }' file
    • file1 file2 file3 可以,我试试这个
    • 这应该对你有用,因为我已经测试过了,如果有任何问题,请告诉我。
    • print $0 &gt; "file" NR ".txt" 更改为print &gt; ("file" NR ".txt") 是为了简洁,更重要的是,为了便于携带。 NEXT 出现在输出中的唯一方法是它没有被换行符包围,或者您没有使用 GNU awk。
    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 2021-08-20
    • 2022-01-25
    相关资源
    最近更新 更多