2015-08-13 4 views
0

У меня есть 25 файлов в каталоге, все они называются xmolout1, xmolout2, ..., xmolout25.скрипт bash для прокрутки разных файлов и выполнения команды

Это все файлы .txt, и мне нужно, чтобы copy the last 80 lines из этих файлов в новые .txt-файлы.

Предпочтительно, они автоматически генерируют правильное число (взятое из исходного файла, например, xmolout10 будет генерировать final10 и т. Д.).

Оригинальные файлы могут быть удалены впоследствии.

Я новичок в bash сценариях, я знаю, что могу копировать последние 80 строк, используя tail -80 filename.txt > newfilename.txt, но я не знаю, как реализовать цикл.

Заранее спасибо

+0

Вы пробовали что-нибудь? Я поставил точное название этого вопроса в поисковую систему, и первый удар дал мне ответ ... – arco444

+0

Я сделал, и общий ответ, предоставленный первым хитом, - это тот, который представлен здесь. Это то же самое, что и у меня, но я не знал, как автоматически зацикливаться на 25 файлах ... Как я уже упоминал, я никогда не писал ничего, что даже близко к «скрипту». –

ответ

2

Если вы знаете, количество файлов, подлежащих обработке, можно использовать переменную счетчика в цикле:

for ((i=1; i<=25; i++)) 
do 
    tail -80 "xmolout$i" > "final$i" 
done 

Если вы хотите сохранить совместимость с другими, чем Баш оболочек вы можете использовать этот синтаксис:

for i in {1..25} 
do 
    tail -80 "xmolout$i" > "final$i" 
done 
+0

Спасибо, второй ответ - лучший вариант в этом случае :) –

+0

@StevenVanuytsel Да, второй синтаксис выглядит лучше, но имейте в виду, что (во втором синтаксисе) скобки расширяются * до того, как * цикл вызывается, поэтому если ваш цикл становится слишком длинным, он медленнее первого синтаксиса. Он также не работает с переменными в качестве границ. – user000001

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