Как насчет попробовать xfce, это делает приблизительно что gnome2, но лучше и с с меньшим количеством ресурсов. (склонный - получают установку xfce4).
Если это к тяжелому просвещению попытки, это легко на ресурсе, но все еще хорошо посмотреть на.
Следующий скрипт должен сделать внешнее соединение на столбце (поле) 1 всех вкладок-разделите файлы, переданные в качестве аргументов. Он использует команду присоединиться к команде , которая выполняет внешнее соединение в отсортированных файлах, 2 файла одновременно.
Он присоединяется к каждой строке в файлах, включая линии заголовка. Если вы хотите, чтобы заголовки были исключены, измените два сортировку
для чего-то, что производит отсортированный файл, который их пропускает.
#!/bin/sh
if test $# -lt 2
then
echo usage: gjoin file1 file2 ...
exit 1
fi
sort -t $'\t' -k 1 "$1" > result
shift
for f in "$@"
do
sort -t $'\t' -k 1 "$f" > temp
join -1 1 -2 1 -t $'\t' result temp > newresult
mv newresult result
done
cat result
rm result temp
Если у вас есть более старая оболочка, $ '\ T'
не будет заменена вкладкой, поэтому вам нужно использовать вкладку , где вы положили буквальную вкладку между цитатами.
Оптимизация возможна, если вместо / bin / sh
вы можете использовать современную оболочку, такую как Bash или KSH; Например, линии
sort -t $'\t' -k 1 "$f" > temp
join -1 1 -2 1 -t $'\t' result temp > newresult
могут быть заменены на
join -1 1 -2 1 -t $'\t' result <(sort -t $'\t' -k 1 "$f") > newresult
Поскольку, согласно вашему сообщению, ключи в первом столбце всегда одинаковы (отличается только порядок), я думаю, вы могли бы сделать это быстрее с помощью sort
, вырезать
и вставить
. Вы можете отсортировать один из файлов (исключая первые две строки), а затем отсортировать остальные файлы (опять же, исключая первые две строки), извлечь только второй столбец из каждого из них и вставить результаты.
Пример:
1.txt
:
g_s_n FPKM56
MT-ND2 21.06
MT-TF 0.90
MT-TV 1
MT-RNR1 310.015
MT-TL1 1
MT-TM 1
2.txt
:
g_s_n FPKM53
MT-TF 0
MT-TV 0.344
MT-TM 0.10
MT-TL1 0
MT-RNR1 0
MT-ND2 158.332
3.txt
:
g_s_n FPKM58
MT-RNR1 0.82
MT-TM 7
MT-TF 1.20
MT-TV 4
MT-ND2 4.05
MT-TL1 2
выполняется:
paste <({ head -n 2; sort; } <1.txt) <({ head -n 2; sort; } <2.txt | cut -f2) \
<({ head -n 2; sort; } <3.txt | cut -f2)
производит:
g_s_n FPKM56 FPKM53 FPKM58
MT-ND2 21.06 158.332 4.05
MT-RNR1 310.015 0 0.82
MT-TF 0.90 0 1.20
MT-TL1 1 0 2
MT-TM 1 0.10 7
MT-TV 1 0.344 4
Как это работает: {head -n 2; Сортировать; } <1.txt
сортирует первый файл (кроме первых двух строк), поэтому первый столбец (общий) теперь отсортирован:
g_s_n FPKM56
MT-ND2 21.06
MT-RNR1 310.015
MT-TF 0.90
MT-TL1 1
MT-TM 1
MT-TV 1
То же самое для других файлов: {head -n 2; Сортировать; }
первый столбец идентичен для всех файлов):
FPKM53
158.332
0
0
0
0.10
0.344
и:
FPKM58
4.05
0.82
1.20
2
7
4
все они объединены паста
.
Конечно, вышеперечисленное отлично работает для ограниченного числа файлов и если ваша оболочка поддерживает подстановку процессов. В противном случае вам придется написать сценарий и использовать временные файлы (как это делает Марк в своем ответе), вставлять файлы партиями по 10, 20 и т. Д. В зависимости от ограничений вашей системы.