【发布时间】:2012-02-09 14:43:09
【问题描述】:
我有三个文件,每个文件都有一个 ID 和一个值。
sdt5z@fir-s:~/test$ ls
a.txt b.txt c.txt
sdt5z@fir-s:~/test$ cat a.txt
id1 1
id2 2
id3 3
sdt5z@fir-s:~/test$ cat b.txt
id1 4
id2 5
id3 6
sdt5z@fir-s:~/test$ cat c.txt
id1 7
id2 8
id3 9
我想创建一个看起来像这样的文件...
id1 1 4 7
id2 2 5 8
id3 3 6 9
...最好使用单个命令。
我知道加入和粘贴命令。每次粘贴都会复制 id 列:
sdt5z@fir-s:~/test$ paste a.txt b.txt c.txt
id1 1 id1 4 id1 7
id2 2 id2 5 id2 8
id3 3 id3 6 id3 9
加入效果很好,但一次只能用于两个文件:
sdt5z@fir-s:~/test$ join a.txt b.txt
id1 1 4
id2 2 5
id3 3 6
sdt5z@fir-s:~/test$ join a.txt b.txt c.txt
join: extra operand `c.txt'
Try `join --help' for more information.
我也知道 paste 可以通过使用“-”将 STDIN 作为参数之一。例如,我可以使用以下命令复制连接命令:
sdt5z@fir-s:~/test$ cut -f2 b.txt | paste a.txt -
id1 1 4
id2 2 5
id3 3 6
但我仍然不确定如何修改它以容纳三个文件。
由于我在 perl 脚本中执行此操作,我知道我可以执行类似将其放入 foreach 循环之类的操作,例如 join file1 file2 > tmp1、join tmp1 file3 > tmp2 等。但这会变得混乱,并且我想用单线来做到这一点。
【问题讨论】:
-
我也知道这是一个带有 SQL 内连接的小菜一碟,但我不想先将所有这些加载到数据库中。