Проблема с, “в то время как считано” и вставка

У меня есть 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

Но это не работает. Как я могу заставить его работать?

0
задан 21 August 2015 в 18:07

3 ответа

Вставка файлов должна иметь все элементы, данные одновременно 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}.

4
ответ дан 28 July 2019 в 19:37

У меня нет терминала для тестирования моего ответа, таким образом, я попробую слепое предположение.

я думал бы, что могло бы быть различие в поведении между

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 только однажды в конце Вашего цикла и могли таким образом иметь некоторое повышение производительности по сравнению с вычислениями вставки при каждом повторении Вашего цикла

1
ответ дан 28 July 2019 в 19:37

Используя 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
0
ответ дан 28 July 2019 в 19:37

Другие вопросы по тегам:

Похожие вопросы: