【问题标题】:Use awk to separate text file into multiple files使用 awk 将文本文件分成多个文件
【发布时间】:2016-07-12 18:22:04
【问题描述】:

我已经阅读了有关此问题的其他几个问题,但似乎没有一个有效。我目前正在尝试使用分隔符“STOPHERE”拆分文件 A.txt 之类的内容。

这是代码:

#!/bin/bash

awk 'BEGIN{
    RS = "STOPHERE"
    file = 0}
{
    file++
    print $0 > ("sepf" file)
}' A.txt

文件 A:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa      lwdjnuqqfqaaaaaaaaaa   qlknfqek fkgnl       efekfnwegelflfne
ldnwefne f STOPHEREsdfnkjnf nnnnnnnnnnnnnnnnnnnnnnnasd  fefffffffffffffflllo  

aldn3orn    STOPHERE

fknjke bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbowqff STOPHERE i
asfjfenf STOPHERE

进入这些:

sepf1:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa      lwdjnuqqfqaaaaaaaaaa   qlknfqek fkgnl       efekfnwegelflfne
ldnwefne f 

sepf2:

sdfnkjnf nnnnnnnnnnnnnnnnnnnnnnnasd  fefffffffffffffflllo  

aldn3orn  

sepf3:

    #line starts here
fknjke bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbowqff 

sepf4:

 i
asfjfenf 

所以基本上,STOPHERE 之间的格式必须保持完全相同。

但出于某种原因,这是我在某些文件中得到的那种输出:

例如:sepf2

TOPHEREsdfnkjnf nnnnnnnnnnnnnnnnnnnnnnnasd  fefffffffffffffflllo  

aldn3orn

关于为什么“TOPHERE”仍然存在的任何想法?

【问题讨论】:

  • 这表示只有第一个字符用作记录分隔符staff.science.uu.nl/~oostr102/docs/nawk/nawk_19.html
  • 有什么办法可以改变它,让它使用整个单词?
  • 根据您的操作系统尝试 nawk 或 gawk。它们允许使用正则表达式。
  • 谢谢!我会试试的。
  • 我很好奇——到底什么起作用了?如果答案有帮助和/或解决了问题,我建议您mark them accordingly (link)。这有助于其他用户。

标签: shell awk


【解决方案1】:

GNU awk 允许 RS 成为正则表达式。因此,您可以提供多个字符作为记录分隔符。您的代码也可以简化,因为 AWK 提供了默认值 0。 所以这将为每条记录生成单独的文件。

awk -v RS="STOPHERE" '{print $0 > ("sepf" ++file)}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2017-09-05
    • 2019-08-06
    • 2018-06-02
    相关资源
    最近更新 更多