Как сохранить результат команды вырезки в файл - PullRequest
0 голосов
/ 01 февраля 2019

мой вопрос прост:

Я использовал:

for file in `/path/*_aa.fasta.aln; do cut -f 1 -d "|" ${file} > ${file}.1; done`

Здесь, как вы можете видеть, я сохраняю результат в ${file}.1, но как это сделать на ${file}прямо?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Поскольку вы не можете ни читать, ни записывать в файл в целом, вам необходимо сохранить / буферизовать вывод, а затем вывести (вывод) в файл.

Пример like (это удаляет / добавляет только одинзавершающие пустые новые строки):

cmd file | { buf=$(cat); printf "%s\n" "$buf" } > file

или:

temp=$(mktemp)
cmd file > "$temp"
mv "$temp" file

или если у вас есть губка , которая делает именно это:

cmd file | sponge file

Таким образом, вы можете:

for file in /path/*_aa.fasta.aln; do 
    cut -f 1 -d "|" ${file} > ${file}.1
    mv ${file}.1 ${file}
done

или если у вас есть sponge:

for file in /path/*_aa.fasta.aln; do 
    cut -f 1 -d "|" "${file}" | sponge "${file}"
done

Примечание: не используйте обратных кавычек ``.Используйте подстановку команд $( ... ).Обратные кавычки устарели, не читаются и становятся более нечитаемыми при вложении.

0 голосов
/ 01 февраля 2019

Попробуйте это:

for file in "/path/*_aa.fasta.aln";
do 
    cut -f 1 -d "|" ${file} > ${file}.tmp; 
    mv  ${file}.tmp ${file}; 
done
...