GNU/Linux >> Tutoriels Linux >  >> Linux

Comment remplir un fichier avec un flux de /dev/urandom avec un nombre de lignes spécifié ?

J'essaie de remplir un fichier avec une séquence de 0 et de 1 aléatoires avec un nombre de lignes et un nombre de caractères par ligne définis par l'utilisateur.

la première étape consiste à obtenir un flux aléatoire de 0 et 1 :

cat /dev/urandom | tr -dc 01

puis j'ai essayé de remplir un fichier avec ce flux (et de terminer le processus de remplissage par ctrl+c)

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

quand je compte le nombre de lignes du fichier foo ainsi créé, j'obtiens 0 lignes.

cat foo | wc -l
0

Maintenant, j'ai essayé de contrôler le flux, j'ai donc créé un canal nommé et y ai dirigé le flux. Ensuite, j'ai fait une connexion au tube nommé avec la commande dd en vain dans l'espoir de contrôler de cette façon le nombre de caractères par ligne et le nombre de lignes dans le fichier.

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

le fichier foo a bien été rempli avec 50 octets de 0 et 1 , mais le nombre de lignes était toujours de 0.

Comment puis-je le résoudre, je suppose que je dois peut-être insérer chaque nombre de caractères une nouvelle ligne dans le fichier, mais si c'est le cas, je ne sais pas comment.

Réponse acceptée :

Que diriez-vous de fold ? Cela fait partie de coreutils…

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

Ou si ce n'est pas disponible, une saveur de awk :

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

Ou vous pouvez simplement faire quelque chose avec une boucle…

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

Je suis sûr qu'il y a d'autres moyens... Je pensais que hexdump avec un format personnalisé pourrait le faire, mais apparemment pas... 😉


Linux
  1. Comment générer un mot de passe aléatoire sous Linux en utilisant /dev/random

  2. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  3. Quand utiliser /dev/random contre /dev/urandom ?

  4. Comment déterminer quels processus utilisent la quantité d'entropie de /dev/urandom

  5. Comment Linux utilise /dev/tty et /dev/tty0

Comment exécuter le fichier sh à partir d'un autre fichier sh

Comment créer un fichier sous Linux à partir de la fenêtre du terminal ?

Comment échanger /dev/sda avec /dev/sdb ?

Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

DD de /dev/zero à /dev/null...ce qui se passe réellement

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0