【发布时间】:2020-01-17 13:14:45
【问题描述】:
如果我的消息格式不正确,我是新来的,非常抱歉。
我有几个文件,file1 仅包含参考模式,其他文件包含各种信息。我想在新列中恢复行号,其中 file1 的模式出现在其他文件中。如果可能的话,我希望相应的文件名包含在标题中。
最后,我希望从最终输出中删除所有缺少值的行。
文件1:
Entry
abc
def
ghi
jkl
mno
xyz
文件2:
line1: red|31000|ghi
line2: purple|25640|mno
line3: yellow|9560|abc
line12: blue|2630|def
line120: white|1|xyz
文件3:
line1: blue|144009|def
line2: red|100000|ghi
line3: purple|60500|mno
line52: white|2|xyz
预期的最终输出:
Entry|file2|file3
def|12|1
ghi|1|2
mno|2|3
xyz|120|52
我想有一个使用 awk 的解决方案,但我不是很能自己处理它(对不起)。我尝试使用 grep ,我知道它可以打印行号并比较几个文件,但这可能不是一个好的选择,因为它会像最初一样打印第二个文件。
grep -Fnf file1 file2 > output
非常感谢您的帮助!
【问题讨论】:
-
好的,谢谢您的评论。有没有简单的方法来编辑我的帖子?再次抱歉,我是新来的,还不熟悉论坛的实际用法。
-
在您的用户ID左侧,您可以看到“分享”、“编辑”和“标记”的链接。点击“编辑”
-
我觉得 grep 不可行。尝试为此目的编写一个 python/perl/awk 脚本。
-
@serpantinAL 更好,但是您在输入文件中显示的
line12:等值是否真的存在于这些文件中,或者您是否试图告诉我们文本的其余部分存在于第 12 行?如果是前者,那很好,如果是后者,那么修复它,以便您问题中的输入文件准确且仅显示您的实际输入。再次 - 我们需要您提供我们可以复制/粘贴以进行测试的输入文件。您必须提供输入文件供我们测试,或者每个阅读您的问题的人都必须创建自己的输入文件进行测试。猜猜哪种方法会产生最多/最好的答案! -
另外,包括
abc等出现在 file2 和 file3 的第一列以及abcdef出现在第三列的情况,因此我们可以查看您是否要在任何地方进行匹配在线上,仅在 1 列中,仅在完整字段或部分字段中,等等。此外,如果您的文件可以包含正则表达式元字符,则在您的示例中包括对这些元字符的处理。
标签: shell awk grep text-processing