linux - tsv 文件两列的并集

标签 linux graph cut csv

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

node1 TAB node2 TAB权重

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

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

最佳答案

{ cut -f1 input_graph; cut -f2 input_graph; } | sort | uniq

无需排序两次。

{ cmd1;命令2; } 语法等同于 (cmd1; cmd2) 但可以避免子 shell。

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

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

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

关于linux - tsv 文件两列的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19020255/

相关文章:

java - 编译错误java hadoop程序

java - 从 linux 命令行生成覆盖率报告

linux - Packer Amazon EBS Chef - 抱歉,您必须有 tty 才能运行 sudo

linux - Linux 中的 Cut 和 Awk 命令

c - 取消线程后如何杀死所有使用 pthread_create 创建的子进程?

algorithm - 如何将无向图转换为每个节点最多有 K 个父节点的有向图?

java - 在java中保存为文本文件或对象有什么区别以及何时使用?

c - 具有数百万个节点的图形数据结构(社交网络)

shell - 循环遍历以逗号分隔的 shell 变量

linux - 我如何使用一组指令的输出来创建一个新变量?