2014-02-15 5 views
2

Как объединить несколько файлов с 3 столбцами? ожидаемый результат на join.txt,присоединиться к ключевому файлу с несколькими файлами

server7.txt 
DATE TIME server7 
20140209 00:00-00:05 99.958775783378% 
20140209 00:05-00:10 99.951034588364% 
20140209 00:10-00:15 99.946565356473% 
server8.txt 
DATE TIME server8 
20140209 00:00-00:05 99.9585236073714% 
20140209 00:05-00:10 99.9506962782437% 
20140209 00:10-00:15 99.9379659962486% 
server9.txt 
DATE TIME server9 
20140209 00:00-00:05 99.9486422652602% 
20140209 00:10-00:15 99.9433509611542% 
20140209 00:20-00:25 99.9318584549217% 

join.txt 
DATE TIME server7 server8 server9 
20140209 00:00-00:05 99.958775783378% 99.9585236073714% 99.9486422652602% 
20140209 00:05-00:10 99.951034588364% 99.9506962782437% 99.9433509611542% 
20140209 00:10-00:15 99.946565356473% 99.9379659962486% 99.9318584549217% 

Я уже использую

паста -d»" сервер * .txt

но его соединить все линии без сравнения ключа

+0

Какова логика объединения линий? Наблюдайте 'TIME' в разных столбцах в' server9.txt'. '00: 20-00: 25' - это не отображается в других файлах. – devnull

ответ

2

Как commented above, ваш вклад не совсем соответствует ожидаемый результат. В файле server9.txt отсутствует строка для времени 00:05-00:10 и содержит дополнительную для 00:20-00:25. Тем не менее, следующее должно дать вам представление о том, как присоединиться к файлам. Высказывание:

join -1 1 -2 1 -1 2 -2 2 -o 1.1,1.2,1.3,2.3 server7.txt server8.txt 

будет производить:

DATE TIME server7 server8 
20140209 00:00-00:05 99.958775783378% 99.9585236073714% 
20140209 00:05-00:10 99.951034588364% 99.9506962782437% 
20140209 00:10-00:15 99.946565356473% 99.9379659962486% 

В приведенной выше команде, мы присоединяемся файлы, основанные на графах 1 и 2 в двух файлах и выходных столбцов 1, 2, 3 из file1 и колонки 3 из файла2.

Вы можете направить этот выход в третий файл:

join -1 1 -2 1 -1 2 -2 2 -o 1.1,1.2,1.3,2.3 server7.txt server8.txt | join -1 1 -2 1 -1 2 -2 2 -o 1.1,1.2,1.3,1.4,2.3 - server9.txt 

Это приведет:

DATE TIME server7 server8 server9 
20140209 00:00-00:05 99.958775783378% 99.9585236073714% 99.9486422652602% 
20140209 00:10-00:15 99.946565356473% 99.9379659962486% 99.9433509611542% 

Как было отмечено выше, расхождение в результатах, и ваш ожидаемый результат обусловлен факт, что столбец TIME в server9 не совсем соответствует значениям TIME в других файлах.

+1

хакер! .................. :) – hek2mgl

+0

@devnull спасибо ... – MLSC

+0

@devnull также вы можете использовать '--header', чтобы не влиять на первую строку – MLSC

1

например, если у вас есть два файла с одним столбцом:

join -j 2 $2 $1 

0 можно прочитать вручную join команду в Баш

вот некоторые помогает: join join2 join3

вы также можете перенаправить вывод в column -t

+0

'join' принимает 2 файла, но есть (как минимум) 3 входных файла. Как каскадно это? – hek2mgl

+0

вы можете отредактировать все, что захотите ... три файла и т. Д. – MLSC

+0

Нет, это не работает (мне по-прежнему нравится попытка в основном) – hek2mgl

0

Это работает, но ваш вклад кажется странным, что вызывает нечетный вывод:

awk 'FNR!=1{a[$1" "$2]=a[$1" "$2] " " $3}END{for(i in a)print i a[i]}' server*txt 

В принципе, "FNR = 1!" Позволяет игнорировать строки заголовков (line1). Затем для каждой строки, прочитанной, столбец 3 добавляется к ассоциативному массиву (a []), как индексируется по полям 1 и 2, поэтому индекс элементов массива будет комбинированным полем даты и времени.

В конце все ключи от ассоциативного массива распечатываются вместе с совокупными периодами времени в конце.

Это будет работать для любого количества файлов * .txt сервера без командной строки, которые становятся все более и более непонятными.

Пример вывод:

20140209 00:00-00:05 99.958775783378% 99.9585236073714% 99.9486422652602% 
20140209 00:10-00:15 99.946565356473% 99.9379659962486% 99.9433509611542% 
20140209 00:20-00:25 99.9318584549217% 
20140209 00:05-00:10 99.951034588364% 99.9506962782437% 

Вы можете сортировать вывод после этого, как не для того, чтобы присущего AWK массивов.

Смежные вопросы