Я хочу разбить и GZip большой файл, и этот ответ, казалось, был тем, что я искал, и это казалось очень полезным способом делать вещи, о которых я никогда не думал, поэтому я хотел бы обобщить это; Единственная проблема: это не работает.
Скажем, я хочу разделить свой ввод и обработать его дальше (я знаю split
но я хочу напрямую передать его в свой сценарий!)
Это использует read
чтобы прочитать строку в переменную
#!/bin/bash
printf " a \n b \n c \n d " |
for ((i = 0 ; i < 2 ; i++)) ; do
echo "<< $i >>"
for ((j = 0 ; j < 2 ; j++)) ; do
read l
echo "$l"
done
done
Это печатает
<< 0 >>
a
b
<< 1 >>
c
d
Что почти то, что я хочу, кроме того факта, что он обрезает пробелы от начала и до конца (и, возможно, изменяет строку другими способами? Будет ли он работать с произвольным содержимым в кодировке UTF-8?) редактирование решено
И я думаю, что это может быть довольно медленно. редактировать протестированные его: по крайней мере 3000X медленнее.
Поэтому я попытался передать это через head
(я получил результат с использованием awk
как следует из ответа, похоже, что он ничего не делает по-другому)
#!/bin/bash
printf " a \n b \n c \n d " |
for ((i = 0 ; i < 2 ; i++)) ; do
echo "<< $i >>"
head -n 2
done
Это печатает
<< 0 >>
a
b
<< 1 >>
И останавливается, потому что head
закрывает вход при выходе. Я не нашел программу, которая этого не делает, и, возможно, она действительно поддерживается системой? (Я на OS X)
Использование head -n 2 <&0
которое (в соответствии с документацией bash) копирует дескриптор файла первым, также не работает.
Должен ли я использовать именованную трубу? Есть ли какое-то заклинание, чтобы заставить это работать?