【问题标题】:Is there a way to print patterns to new files using awk or python?有没有办法使用 awk 或 python 将模式打印到新文件?
【发布时间】:2021-06-03 13:38:54
【问题描述】:

所以我有一个包含 6 列的 .txt 文件(实际文件中没有标题),如下所示:

|$1 | $2 | $3 | $4 | $5 | Flag |
|:--:|:---:|:---:|:---:|:---:|:---:|
|Foo1 | Foo2 | Foo3 | Foo4 | Foo5 | -1 |
|Foo1 | Foo2 | Foo3 | Foo4 | Foo5 | 0 |
|Foo1 | Foo2 | Foo3 | Foo4 | Foo5 | 1 |
|Foo1 | Foo2 | Foo3 | Foo4 | Foo5 | 2 |
|Foo1 | Foo2 | Foo3 | Foo4 | Foo5 | -1 |
|Foo1 | Foo2 | Foo3 | Foo4 | Foo5 | 0|
|Foo1 | Foo2 | Foo3 | Foo4 | Foo5 | 1 |
|Foo1 | Foo2 | Foo3 | Foo4 | Foo5 | 2 |
|Foo1 | Foo2 | Foo3 | Foo4 | Foo5 | -1 |
|Foo1 | Foo2 | Foo3 | Foo4 | Foo5 | 0|
etc

文件在 -1 和 2 的每次迭代之间有不同数量的行,但 2 标志后面总是跟着 -1。有没有办法可以打印这些模式中的每一个来分隔文件?

如果您知道任何方法可以做到这一点,我将不胜感激。

【问题讨论】:

  • “这些模式中的每一个”是什么意思?您是说每行“组”都应该以-1开头并以2结尾吗?您将如何生成文件名?列是制表符分隔,逗号分隔,什么?
  • 如果我正确理解了您的问题,使用 python 的小脚本很容易做到这一点。不确定如何使用 awk 脚本执行此操作,但它可能是可能的。这是一个现实世界的问题或家庭作业或测试吗?如果是后者,您真的应该尝试编写解决方案,然后在遇到困难时寻求帮助。
  • 您可以使用 awk 的 > filename 运算符打印到文件。每当你得到一个 flag = -1 的行时,你都会更新文件名变量。
  • edit您的问题 a) 从您的示例输入中删除标题和任何其他不存在于您的真实数据中的行,b) 验证周围可能有也可能没有空白的|s(例如| 0 | vs | 0|,和c)添加预期的输出。

标签: python awk


【解决方案1】:

这可能就是你所需要的:

awk -F' *[|] *' '$(NF-1) == -1{close(out); out="out"(++c)} {print > out}' file

【讨论】:

    【解决方案2】:

    取决于您希望如何生成名称:

    filenum = 0
    for line in open('inputfile.txt'):
        final = line.strip().split()[-1]
        if final == '-1':
            fout = open('file%04d.txt'%filenum, 'w')
            filenum += 1
        fout.write( line )
    

    【讨论】:

      猜你喜欢
      • 2021-12-24
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      相关资源
      最近更新 更多