У меня есть три файла, каждый с идентификатором и значением.
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
... желательно с использованием одной команды.
Мне известны команды соединения и вставки. Paste будет дублировать столбец 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.
Я также знаю, что вставка может принимать 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 и т. Д. Но это становится грязным, и Я хотел бы сделать это с одним вкладышем.