Извлечение строк 10 - 20 из файла является простой комбинацией head
и tail
:
tail -n +11 | head -n 10 | mycommand
Эта команда пропускает 10 строк и обрабатывает следующие 10. Если Вы хотите обработать все строки в файле в последовательности, но группами 10, существуют лучшие пути. Можно считать 10 строк с head
неоднократно. Отметьте использование chunk=$(…; echo a)
сопровождаемый путем снимания a
, работать вокруг подавления заключительных новых строк в заменах команды. Этот подход имеет преимущество работы, даже если вход является каналом (который Вы не можете перемотать), и это быстрее для регулярного файла также. Предупреждение, непротестированный код, введенный непосредственно в браузере.
while chunk=$(head -n 10; echo a); chunk=${chunk#a}; [ -n "$chunk" ]; do
printf %s "$chunk" | mycommand
done <filename
С другой стороны, можно заставить awk сделать задание. Снова, непротестированный.
awk '
{chunk = chunk $0 RS}
NR % 10 {print chunk | "mycommand"; close("mycommand"); chunk="" }
END {if (chunk != "") {print chunk | "mycommand"; close("mycommand"); chunk="" }}
' <filename
Когда Вы работаете ./s
, Вы говорите ядру выполнять программу s
. Если у Вас есть разрешение выполнения, то ядро читает первые несколько байтов файла, видит #!
строка, таким образом, это знает, что это - сценарий, и выполняет интерпретатор, передавая его название сценария как его первый аргумент. Если Вы не имеете, выполняют разрешение, ядро прерывает выполнение в первом шаге.
Когда Вы работаете zsh s
, Вы выполняетесь zsh
, и скажите этому читать названный файл s
и интерпретируйте его как команды. Вы не выполняетесь s
, Вы выполняетесь zsh
. То же самое с sh s
или cat s
.
Когда Вы работаете source s
, снова, Вы говорите zsh читать файл, поэтому что имеет значение, то, что Вы прочитали разрешение на нем.
cat s
просто печатает содержание файла.cat s | zsh
передает ихzsh
и печатьTest
. – C106 31.08.2012, 12:11