Python может быть хорошим альтернативным инструментом для этого:
$ python -c "import sys;lines=[str(i)+' & '+l for i,l in enumerate(sys.stdin,1)]; print ''.join(lines)" < input.txt
1 & What & South Dragon & North Dragon & 5 \\ \hline
2 & What & South Dragon & North Dragon & 5 \\ \hline
3 & What & South Dragon & North Dragon & 5 \\ \hline
Это работает так, что мы перенаправляем текст в stdin Python и читаем строки оттуда. Функция enumerate ()
- это то, что дает количество строк, при этом sys.stdin
указан в качестве входных данных, а 1
является начальным индексом. Остальное просто - мы составляем список новых строк, преобразовывая index как строку, соединенную вместе со строкой '&'
, и самой строкой. Наконец, все, что собрано из списка, в один тест с помощью функции ''. Join ()
.
В качестве альтернативы, вот многострочная версия файла сценария или просто для удобства чтения:
#!/usr/bin/env python
import sys
for index,line in enumerate(sys.stdin,1):
print str(index) + ' & ' + line.strip()
Работает точно так же:
$ ./line_counter.py < input.txt
1 & What & South Dragon & North Dragon & 5 \\ \hline
2 & What & South Dragon & North Dragon & 5 \\ \hline
3 & What & South Dragon & North Dragon & 5 \\ \hline
Но если вы предпочитаете делать это в bash, то это тоже можно сделать:
$ counter=1; while read line ; do printf "%s & %s\n" "$counter" "$line" ; counter=$(($counter+1)) ; done < input.txt
1 & What & South Dragon & North Dragon & 5 \ hline
2 & What & South Dragon & North Dragon & 5 \ hline
3 & What & South Dragon & North Dragon & 5 \ hline
Замена -delete
на -print
(по умолчанию) и конвейер
в параллельном GNU должны в основном сделать это:
find . -name '*.in' -type f | parallel rm --
Это запустит одно задание на ядро; используйте -j N
, чтобы использовать вместо этого N
параллельных заданий
.
Не совсем очевидно, что это будет работать намного быстрее, чем последовательное удаление, поскольку удаление, вероятно, требует больше операций ввода-вывода, чем ЦП, но было бы интересно проверить .
(Я сказал «в основном это делаю», потому что эти две команды не полностью
эквивалентны; например, параллельная
версия не будет делать правильных
действий, если некоторые из ваших входных путей включают символы новой строки.)