У меня есть 69 названных файлов *.sites.pi
. Например, OC9.sites.pi
, cu27.sites.pi
, и т.д.
Префикс каждого файла (который является перед .sites.pi) находится в названном файле ind_list
.
$ cat ind_list
OC9
Ocu27
...
Я хочу объединить третьи столбцы всех этих файлов вместе.
Я попробовал:
while read i
do
paste <(cut -f3 $i.sites.pi) >> output
done < ind_list
Но это не работает. Как я могу заставить его работать?
Вставка файлов должна иметь все элементы, данные одновременно paste
. Так как Вы читаете файл, затем необходимо во-первых сохранить содержание где-нибудь - во временном файле, например так, чтобы Вы могли затем paste
их вместе.
, Таким образом, я предлагаю что-то вроде этого:
i=1
while read -r file
do
awk '{print $3}' "$file" > file.$i
((i++))
done < ind_list
Теперь у Вас есть многие file.XX
файлы с 3-м столбцом файла.
Затем просто используйте что-то вроде этого, где glenn jackman просвещает нас :
paste -d " " file.{1..69} > output
И затем можно убрать все временные файлы путем высказывания rm file{1..69}
.
У меня нет терминала для тестирования моего ответа, таким образом, я попробую слепое предположение.
я думал бы, что могло бы быть различие в поведении между
paste <(cut -f3 Ocu27.sites.pi) <(cut -f3 OS10.sites.pi) >output
и
paste <(cut -f3 Ocu27.sites.pi) >>output
paste <(cut -f3 OS10.sites.pi) >>output
Для обращения к этому, Вы могли изменить свой исходный цикл на:
while read i
do
arguments="$arguments <(cut -f3 $i.sites.pi)"
done < ind_list
eval "paste $arguments >output"
Другое преимущество от этого - то, что Вы выполняетесь paste
только однажды в конце Вашего цикла и могли таким образом иметь некоторое повышение производительности по сравнению с вычислениями вставки при каждом повторении Вашего цикла
cat
и awk
cat ind_list | xargs -i'{}' awk '{print $3}' "{}.sites.pi" > output
<час> Пример
Входные файлы
cat OC8.sites.pi
foo bar foobar
cat OC9.sites.pi
foo bar foobar
cat Ocu27.sites.pi
foobar foo bar
cat ind_list
OC8
OC9
Ocu27
команда
cat ind_list | xargs -i'{}' awk '{print $3}' "{}.sites.pi" > output
выходной файл
cat output
foobar
foobar
bar