【问题标题】:Splitting and renaming a file using a word delimiter in Linux在 Linux 中使用单词分隔符拆分和重命名文件
【发布时间】:2018-08-20 10:24:39
【问题描述】:

我有一个文件如下

文件名 split.txt

file part alpha
abc
def
hij
file part beta
klm
nop
file part charlie
qrs
tuv
wxy
zzz

文件需要在“文件部分”行分隔,并根据文件部分行中的最后一个单词重命名。即拆分后,我应该有以下三个文件:

文件 1 - 文件名为 alpha.txt

abc
def
hij

文件 2 - 文件名为 beta.txt

klm
nop

文件 3 - 文件名为 charlie.txt

qrs
tuv
wxy
zzz

到目前为止,我已经设法使用以下命令拆分文件

awk '/file part/{n++}{print >"file" n ".txt"}' split.txt

这导致文件名为 file1.txt、file2.txt 和 file3.txt。

如何让文件名分别为 alpha.txt、beta.txt 和 charlie.txt?

【问题讨论】:

    标签: linux unix awk command-line


    【解决方案1】:

    这条单线应该会有所帮助:

    awk '/file part/{fn=$NF ".txt"}{print > fn}' split.txt
    

    思路和你的代码一样,只是将行中最后一个单词的序号改成文件名。

    【讨论】:

    • 您应该提到,除非那是 GNU awk,否则 OP 可能需要紧接在 fn=... 之前的 close(fn) 以避免“打开的文件过多”错误。
    • @EdMorton,谢谢.. 我知道close()too many open files 的把戏,但是gawk 不会发生这种情况?还是在新版本中实施?我还没有阅读最新的发行说明。
    • 不客气。 gawk 一直在内部管理打开文件的数量,因为我一直在使用它,所以几年/发布。这只是其中之一,没有 gawk 将适用于一个小样本输入文件,然后会在以后爆炸,因此值得在每个答案中明确说明。
    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2020-04-01
    • 2019-12-16
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多