我希望随机地将文件的行(行)随机打印,然后打印到不同的五个文件.
但我一直在file1到file5中出现完全相同的行顺序.随机生成过程无法正常工作.我会很感激任何建议.
#!/bin/bash for i in seq 1 5 do awk 'BEGIN{srand();} {print rand()"\t"$0}' shuffling.txt | sort -k2 -k1 -n | cut -f2- > file$i.txt done
输入shuffling.txt
111 1032192 111 2323476 111 1698881 111 2451712 111 2013780 111 888105 112 2331004 112 1886376 112 1189765 112 1877267 112 1772972 112 574631
如果您没有为srand提供种子,它将使用当前日期和时间.这意味着,如果您的进程运行得足够快,它们将使用相同的种子并生成相同的序列.
原文链接:https://www.f2er.com/bash/387086.html您可以通过使用shell提供的其他种子来解决这个问题.
awk -v seed=$RANDOM 'BEGIN{srand(seed);}{print rand()" "$0}' ...
$RANDOM提供的数字在每次迭代中都会发生变化,因此awk程序的每次运行都会获得不同的种子.
您可以在以下记录中看到此操作:
pax> for i in $(seq 1 5) ; do ...> awk 'BEGIN{srand();print rand()}' ...> done 0.0435039 0.0435039 0.0435039 0.0435039 0.0435039 pax> for i in $(seq 1 5) ; do ...> awk -v seed=$RANDOM 'BEGIN{srand(seed);print rand()}' ...> done 0.283898 0.0895895 0.841535 0.249817 0.398753