【问题标题】:union of two columns of a tsv filetsv 文件的两列的并集
【发布时间】:2013-09-26 05:45:26
【问题描述】:

我有一个存储有向图的文件。每行表示为

node1 TAB node2 TAB 权重

我想找到节点集。有没有更好的工会方式?我目前的解决方案涉及创建临时文件:

cut -f1 input_graph | sort | uniq > nodes1
cut -f2 input_graph | sort | uniq > nodes2
cat nodes1 nodes2 | sort | uniq > nodes

【问题讨论】:

    标签: linux graph cut tsv


    【解决方案1】:
    { cut -f1 input_graph; cut -f2 input_graph; } | sort | uniq
    

    无需两次排序。

    { cmd1; cmd2; } 语法等价于 (cmd1; cmd2) 但可以避免使用子shell。

    在另一种语言(例如 Perl)中,您可以在散列中读取第一列,然后按顺序处理第二列。

    仅使用 Bash,您可以使用语法 cat <(cmd1) <(cmd2) 避免临时文件。 Bash 负责创建临时文件描述符和设置管道。

    在脚本中(您可能希望避免使用 bash),如果您最终需要临时文件,请使用 mktemp

    【讨论】:

    • 你能详细说明一下mktemp吗?
    • 那是一个边缘点,是您未来编写脚本习惯的参考(这就是我最后提到它的原因)。例如。在您的原始代码中,您可以使用mktemp 生成临时文件名(而不是硬编码文件名“nodes1”和“nodes2”):NODES1=$(mktemp); cut -f1 input_graph | sort | uniq > "$NODES1"。但当然,实际上不需要任何类型的临时文件,无论是否有硬编码的名称:)
    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多