此:
def average_time(file_path):
df = pd.DataFrame(pd.read_excel(file_path))
test_names_list = collections.Counter(df.iloc[:, 0])
times_list = {}
for test_name in test_names_list:
times_list[test_name] = []
for row in range(df.shape[0]):
if str(df.iloc[row, 0]) == test_name:
times_list[test_name].append(get_sec(str(df.iloc[row, 5])))
print(test_name, str(dt.timedelta(seconds=mean(times_list[test_name]))))
或者这个:
echo " " | tr ' ' '\n' | sed "s|.*|$RANDOM|"
将打印5个数字的列表(空格用换行符替换,sed用$ RANDOM替换每行),而这5个数字都相同:
echo " " | tr ' ' '\n' | sed "s|.*|$(echo $RANDOM)|"
这是因为将$ RANDOM替换为随机值只会发生一次。
最简单,最短的方法是什么,最好仅使用sed来为每行实际打印一个不同随机数。即提供一些“辅助输入流”,这对于sed处理的每一行都是不同的?
我可以用xargs来做,但是我想知道是否有办法只用sed来做。
答案 0 :(得分:1)
取决于您的sed
版本,但是-
$: cat x
a
b
c
d
e
$: sed 's/.*/printf "%05d\n" $RANDOM/e' x
30181
30514
24742
28555
26267
e
的意思是e
xecute ,并生成一个子shell,因此请谨慎使用费用。
答案 1 :(得分:0)
如果您想要相同的随机数
random=$(cat /dev/urandom | tr -cd '0-9' | head -c 5)
echo -e "$random\n$random\n$random\n$random\n$random"
如果您每次都想要一个不同的号码。这里的问题是很难设置您获得多少个字符
echo -e "$RANDOM\n$RANDOM\n$RANDOM\n$RANDOM\n$RANDOM"
或更合逻辑地表示相同的数字
random=$(cat /dev/urandom | tr -cd '0-5' | head -c 8)
x=0
while (($x < 5)); do echo "$random";((x++));done
或更合逻辑地表示其他数字
x=0
while (($x < 5)); do random=$(cat /dev/urandom | tr -cd '0-5' | head -c 8); echo "$random";((x++));done
答案 2 :(得分:0)
问题:
最简单,最短的方法(最好是使用sed最好是使用em )为每行打印不同的随机数是什么?
答案:
echo " " | tr ' ' '\n' | perl -pe 's|.*|int(rand(89999))+10000|e'
或简单地:
perl -e 'printf "%05s\n",int(rand(100000)) for (1..5)'
说明:
这使我无法理解为什么不使用Perl或任何更适合该工作的工具。在OP中,没有任何理由坚持使用sed
,相反,这仅表示为偏好。
这同样使我无法理解为什么要进行替换以打印五个随机数。没有提供有关全局的详细信息,但这肯定使我感到好奇。
答案 3 :(得分:0)
这可能对您有用(GNU sed和Bash):
seq 5 | sed 's/.*/echo $RANDOM/e'
这将echo $RANDOM
替换为1到5,并评估每一行。
GNU sed使用/bin/sh
,它可能通过符号链接指向/bin/dash
,在这种情况下,将找不到环境变量$RANDOM
。解决此问题的方法有很多种,但最简单(尽管可能很危险)的可能是:
sudo ln -sf /bin/bash /bin/sh
# run sed
sudo ln -sf /bin/dash /bin/sh
另一个替代方案:
shuf -i 1-100000 -n 5
答案 4 :(得分:0)
不,仅使用sed不可能这样做,因为sed无法生成随机数。在您发布的示例中,甚至没有使用sed进行操作,而是在调用sed之前外壳生成了一个随机数。 sed看到的只是"s|.*|21590|"
。
如果要在任何UNIX盒的任何shell中使用标准工具来执行此操作,则可以使用任何awk来执行此操作:
$ echo " " | tr ' ' '\n' | awk '{sub(/.*/,rand())}1'
0.924046
0.593909
0.306394
0.578941
0.740133
有关rand()
的更多信息,请参见https://www.gnu.org/software/gawk/manual/gawk.html#Numeric-Functions,如果您有兴趣寻求awk解决方案,我可以提供C&V。
答案 5 :(得分:0)
我找到了以下解决方案:
$ seq 5 | sed "s/.*/date +%N | grep -o '[0-9][0-9][0-9][0-9][0-9]$'/e"
16794
76358
17143
60690
70506
它使用纳秒计时器的最后 5 个数字来生成一个合理的随机熵质量随机数。