2016-03-15 3 views
0

Я хочу сделать что-то вроде этого:оболочки процесс трубы повторить

~ cat dump.sh 
command 1 | command 2 | command 1 | command 2 | ...(ten times) | command 1 | command2 

~ ./dump.sh < demo.log 

Так как изменить dump.sh в то время как я могу указать точно n времена command 1 и command 2 в паре обрабатывать demo.log?

+1

Можете ли вы предоставить две простые команды, что можно применить п раз в паре на демо .журнальный файл? Это непросто выяснить, и, следовательно, помочь вам. – zezollo

+3

Как только вы поймете, что повторяете подобные вещи, это часто означает, что есть лучший способ делать то, что вы делаете. – zdim

+0

@zezollo Трудно представить себе сценарий, где это было бы действительно полезно, но нетрудно придумать пару фильтров, которые ... что-то делают. Я использовал 'sed 's/^/one /" 'и' sed' s/^/two/"' для тестирования. – tripleee

ответ

2

Вы можете написать простую рекурсивную вспомогательную функцию, что-то вроде этого:

loop() { 
    case $1 in 
     0) cat;; 
     *) command 1 | command 2 | loop $(($1 - 1)) ;; 
    esac 
} 

Invoke это как

loop 3 <demo.log 
+0

ничего себе! Именно то, что я ожидаю! Большое спасибо! – hedleyyan

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