GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie füllt man eine Datei mit einem Stream aus /dev/urandom mit einer bestimmten Anzahl von Zeilen?

Ich versuche, eine Datei mit einer Folge von zufälligen 0 und 1s mit einer benutzerdefinierten Anzahl von Zeilen und einer Anzahl von Zeichen pro Zeile zu füllen.

Der erste Schritt besteht darin, einen zufälligen Strom von 0 und 1s zu erhalten:

cat /dev/urandom | tr -dc 01

dann habe ich versucht, eine Datei mit diesem Stream zu füllen (und den Vorgang des Füllens mit Strg+C zu beenden)

cat /dev/urandom | tr -dc 01 > foo

Wenn ich die Anzahl der Zeilen der so erstellten foo-Datei zähle, erhalte ich 0 Zeilen.

cat foo | wc -l
0

Jetzt habe ich versucht, den Stream zu steuern, also habe ich eine benannte Pipe erstellt und den Stream dorthin geleitet. Dann habe ich mit dem dd-Befehl eine Verbindung zur Named Pipe hergestellt, in der vergeblichen Hoffnung, auf diese Weise die Anzahl der Zeichen pro Zeile und die Anzahl der Zeilen in der Datei zu kontrollieren.

makefifo namedpipe
cat /dev/urandom | tr -dc 01 > namedpipe
dd if=namedpipe of=foo bs=10 count=5

Die foo-Datei wurde zwar mit 50 Byte 0 und 1 gefüllt, aber die Anzahl der Zeilen war immer noch 0.

Wie kann ich das lösen, vielleicht muss ich für jede Zeichenzahl einen Zeilenumbruch in die Datei einfügen, aber wenn ja, weiß ich nicht wie.

Akzeptierte Antwort:

Wie wäre es mit fold ? Es ist Teil von Coreutils…

$ tr -dc 01 < /dev/urandom | fold -w 30 | head -n 5
001010000111110001100101101101
000101110011011100100101111000
111010101011100101010110111001
111011000000000101111110110100
110011010111001110011010100011

Oder, wenn das nicht verfügbar ist, eine Variante von awk :

$ tr -dc 01 < /dev/urandom | awk $0=RT RS=.{,30} | head -n 5
000100010010001110100110100111
101010010100100110111010001110
100011100101001010111101001111
010010100111100101101100010100
001101100000101001111011011000

Oder Sie könnten einfach etwas mit einer Schleife machen …

$ for line in $(seq 1 5)
> do
>     echo $(tr -dc 01 < /dev/urandom | head -c 30)
> done
100101100111011110010010100000
000000010000010010110111101011
010000111110010010000000010100
001110110001111011101011001001
001010111011000111110001100110

Ich bin mir sicher, dass es andere Möglichkeiten gibt … Ich dachte, Hexdump mit einem benutzerdefinierten Format könnte es vielleicht tun, aber anscheinend nicht … 😉


Linux
  1. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

  2. Wie kann /dev/random oder /dev/urandom mit base64 codiert werden?

  3. So führen Sie eine sh-Datei aus einer anderen sh-Datei aus

  4. Wie erstelle ich eine Datei in Linux aus dem Terminalfenster?

  5. Wie tauscht man /dev/sda mit /dev/sdb aus?

So ordnen Sie /dev/sdX- und /dev/mapper/mpathY-Geräte vom /dev/dm-Z-Gerät zu

Was sind /dev/zero- und /dev/null-Dateien in Linux

DD von /dev/zero nach /dev/null ... was eigentlich passiert

Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0

echo oder print /dev/stdin /dev/stdout /dev/stderr

Warum sind < oder > erforderlich, um /dev/tcp