Snažím se naplnit soubor posloupností náhodných 0 a 1 s uživatelem definovaným počtem řádků a počtem znaků na řádek.
prvním krokem je získat náhodný stream 0 a 1s:
cat /dev/urandom | tr -dc 01
pak jsem zkusil naplnit soubor tímto streamem (a ukončit proces plnění pomocí ctrl+c)
cat /dev/urandom | tr -dc 01 > foo
když spočítám počet řádků takto vytvořeného souboru foo, dostanu 0 řádků.
cat foo | wc -l 0
Nyní jsem se pokusil ovládat proud, takže jsem vytvořil pojmenovanou rouru a nasměroval proud do ní. Potom jsem provedl připojení k pojmenovanému kanálu pomocí příkazu dd v marné naději, že tímto způsobem ovládnu počet znaků na řádek a počet řádků v souboru.
makefifo namedpipe
cat /dev/urandom | tr -dc 01 > namedpipe
dd if=namedpipe of=foo bs=10 count=5
soubor foo byl skutečně vyplněn 50 bajty 0 a 1 , ale počet řádků byl stále 0.
Jak to mohu vyřešit, asi budu muset do souboru vložit každý počet znaků nový řádek, ale pokud ano, nevím jak.
Přijatá odpověď:
Co takhle fold
? Je součástí coreutils…
$ tr -dc 01 < /dev/urandom | fold -w 30 | head -n 5
001010000111110001100101101101
000101110011011100100101111000
111010101011100101010110111001
111011000000000101111110110100
110011010111001110011010100011
Nebo pokud to není k dispozici, nějaká varianta awk
:
$ tr -dc 01 < /dev/urandom | awk $0=RT RS=.{,30} | head -n 5
000100010010001110100110100111
101010010100100110111010001110
100011100101001010111101001111
010010100111100101101100010100
001101100000101001111011011000
Nebo můžete udělat něco se smyčkou…
$ for line in $(seq 1 5)
> do
> echo $(tr -dc 01 < /dev/urandom | head -c 30)
> done
100101100111011110010010100000
000000010000010010110111101011
010000111110010010000000010100
001110110001111011101011001001
001010111011000111110001100110
Jsem si jistý, že existují i jiné způsoby... Myslel jsem, že by to mohl udělat hexdump s vlastním formátem, ale zjevně ne... 😉