Ich möchte eine große Datei aufteilen und GZipen und diese Antwort schien das zu sein, wonach ich suchte, und es schien mir eine sehr nützliche Möglichkeit zu sein, Dinge zu tun, an die ich nie gedacht hatte, also möchte ich es verallgemeinern; Das einzige Problem ist: Es scheint nicht zu funktionieren.
Angenommen, ich möchte meine Eingabe aufteilen und weiterverarbeiten (ich weiß split aber ich möchte es direkt in meinem Skript herumspielen!)
Dies nutzt read eine Zeile in eine Variable einlesen
#!/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
Es druckt
<< 0 >>
a
b
<< 1 >>
c
d
Was ist fast das, was ich will, abgesehen von der Tatsache, dass die Leerzeichen von Anfang bis Ende gekürzt werden (und die Zeile möglicherweise auf andere Weise geändert wird? Funktioniert es mit willkürlichem UTF-8-codiertem Inhalt?) bearbeiten gelöst
Und ich stelle mir vor, es könnte ziemlich langsam sein. bearbeiten Benchmarking: mindestens 3000x langsamer.
Also habe ich versucht, es durchzuleiten head (Ich bekomme das Ergebnis mit awk wie die Antwort schon sagt, scheint es nichts anders zu machen)
#!/bin/bash
printf " a \n b \n c \n d " |
for ((i = 0 ; i < 2 ; i++)) ; do
echo "<< $i >>"
head -n 2
done
Das druckt
<< 0 >>
a
b
<< 1 >>
Und hört da auf head schließt offenbar seine Eingabe beim Beenden. Ich habe kein Programm gefunden, das dies nicht tut, und vielleicht wird es tatsächlich vom System durchgesetzt? (Ich bin auf OS X)
Verwenden head -n 2 <&0 was (laut den bash docs) den file descriptor zuerst kopiert, funktioniert auch nicht.
Muss ich eine Named Pipe verwenden? Gibt es eine Beschwörung, um diese Arbeit zu machen?
read streift es ab, echo ".$l." druckt .a.. Ich denke, die Shell entfernt Leerzeichen beim Aufteilen der Argumente, l=" a "; echo $l druckt a aber l=" a "; echo "$l" druckt die Leerzeichen `a`. ( read kann auch die Eingabe auch durch Leerzeichen und mehrere Variablen füllen, deshalb wahrscheinlich)
read l.
echo "..$l.."um zu sehen, was in gespeichert wurde l , wie Echo ignoriert führende und nachfolgende Leerzeichen.