【发布时间】:2014-06-19 08:06:16
【问题描述】:
第 1 部分:
所以,我有一个看起来像这样的文件(输入文件):
inputfile
unimportant stuff ...
col1 col2 col3
26 ACE 0
27 ACE 0
28 ACE 0
...
32 CCY 1
33 CCY 1
34 CCY 1
...
42 NME 2
43 NME 2
44 NME 2
...
48 MMP 3
49 MMP 3
50 MMP 3
...
54 SCY 1
55 SCY 1
56 SCY 1
...
65 MMP 2
66 MMP 2
67 MMP 2
... etc
422 XXX 0
423 XXX 1
期望的输出
outputfile1
col1 col2 col3
26 ACE 0
32 CCY 1
42 NME 2
48 MMP 3
54 SCY 1
65 MMP 2
任何想法如何使用 awk/sed/grep(其他一些程序)来产生所需的输出?换句话说,我正在尝试开发的是一个脚本,它将在 col1 = 26 时开始,并且仅在 col3 更改时打印,直到文件结束。另外,我想删除 col2 中带有 XXX 的任何内容。
第 2 部分:
接下来,我想生成一个依赖于 outputfile1 的 col3 的新文件(outputfile2)。每次 col3 中的计数重置(或减少到 0/1 并重新开始计数)时,我想打印到 outputfile2 类似:
outputfile2
26 - 53
ACE_CCY_NME_MMP
54 - ...
SCY_MMP_...
理想情况下,它会打印
line1: "col1 entry" - "col1 entry minus 1"
line2: "all col 2 entries inbetween col2_col2_col2_col2" etc
我如何才能最好地实现这些结果?
第 1 部分已解决:
awk '$1 == "26" {f=1}f {print $0}' inputfile | uniq -f 2 | sed '/XXX/d' > outputfile1
产生:
26 ACE 0
32 CCY 1
42 NME 2
48 MMP 3
54 SCY 1
64 MMP 2
...
说明: awk 从在 col1 中找到 '26' 的第一个实例打印到文件末尾,然后将其通过管道传送到 uniq ,它会删除 col3 中(相邻行的)具有重复值的所有行,最后 sed 删除任何包含不需要的字符串 'XXX' 的行。如果有人可以更详细地解释 awk {f=1}f 部分,将不胜感激?
【问题讨论】:
-
嗨,Patrick,欢迎来到 Stack Overflow,感谢您提供大量示例数据,但建议您还包括迄今为止的解决方案以及为什么它不起作用。请参阅stackoverflow.com/help/on-topic 了解更多信息
-
谢谢 CyanAngel,我应该编辑我的帖子以包含目前的解决方案,还是“回答问题”?
-
编辑你现有的帖子,你是在添加信息来帮助这个问题,而不是回答它:)
-
再次感谢!完成:)