Shell-Script
如何用指定行數的 /dev/urandom 中的流填充文件?
我試圖用使用者定義的行數和每行字元數來填充一個隨機 0 和 1 序列的文件。
第一步是獲取 0 和 1 的隨機流:
cat /dev/urandom | tr -dc 01
然後我嘗試用這個流填充一個文件(並通過 ctrl+c 結束填充過程)
cat /dev/urandom | tr -dc 01 > foo
當我計算如此創建的 foo 文件的行數時,我得到 0 行。
cat foo | wc -l 0
現在我嘗試控制流,所以我創建了一個命名管道並將流引導到其中。然後我用 dd 命令建立了與命名管道的連接,但希望通過這種方式控制每行的字元數和文件中的行數。
makefifo namedpipe cat /dev/urandom | tr -dc 01 > namedpipe dd if=namedpipe of=foo bs=10 count=5
foo 文件確實充滿了 0 和 1 的 50 個字節,但行數仍然是 0。
我該如何解決它,我想也許我必須在文件中插入一個換行符,但如果是這樣,我不知道如何。
怎麼樣
fold
?它是 coreutils 的一部分…$ tr -dc 01 < /dev/urandom | fold -w 30 | head -n 5 001010000111110001100101101101 000101110011011100100101111000 111010101011100101010110111001 111011000000000101111110110100 110011010111001110011010100011
或者,如果那不可用,一些風味
awk
:$ tr -dc 01 < /dev/urandom | awk \$0=RT RS=.\{,30} | head -n 5 000100010010001110100110100111 101010010100100110111010001110 100011100101001010111101001111 010010100111100101101100010100 001101100000101001111011011000
或者你可以用循環做一些事情……
$ for line in $(seq 1 5) > do > echo $(tr -dc 01 < /dev/urandom | head -c 30) > done 100101100111011110010010100000 000000010000010010110111101011 010000111110010010000000010100 001110110001111011101011001001 001010111011000111110001100110
我敢肯定還有其他方法…我想也許具有自定義格式的 hexdump 可以做到,但顯然不是… ;)