这是一个数值数据科学应用程序。我需要在一个文件中创建一个由零组成的矩阵,用逗号分隔(在一行内),并以换行符结束(在每行的末尾)。这个bash代码是最接近的:
l=`python -c "print(f'{\"0, \" * 9}0')"` # 10 zeros comma separated in one line
yes $l | head -n 3 # print line 3 times
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0就目前而言,这是很好的,除非您尝试将9和3这两个文字更改为shell变量。然而,(对我来说)很难正确地编写代码,用外壳变量n=9替换文字9。我尝试使用bash和python,但仍然不起作用。例如,这两种不同的尝试实际上对变量不起作用(对我来说):
l=$(printf '0,%.0s' {1..$((n-1))}; printf '0') # 100% bash code
yes $l | head -n $k # print line 3 times
0,0
0,0
0,0
l=`python -c "print(f'{\"0, \" * 9}0')"` # using a bit of python, 10 literal zeros comma separated in one line
yes $l | head -n 3 # print line 3 times
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0在本例中,将python中的文本9更改为变量更糟糕,它给了我一些疯狂的东西,比如某种目录列表,这是我绝对不想要的。
发布于 2020-06-03 02:16:26
只是对你的方法做了一点小小的改变:
n=10
k=3
yes "$(yes 0 | head -n "$n" | paste -s -d,)" | head -n "$k"如果需要逗号后面的空格,那么管道到sed 's/,/, /g'就可以做到这一点。
发布于 2020-06-03 02:18:44
在纯bash中:
#!/usr/bin/env bash
cols=$1
rows=$2
declare -a row
for ((i = 0; i < cols; i++)); do
row+=(0)
done
IFS=, line="${row[*]}"
for ((i = 0; i < rows; i++)); do
echo "$line"
done示例:
$ ./demo.sh 10 3
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0发布于 2020-06-03 02:20:01
很抱歉回答我自己的问题,但就像经常发生的那样,我在发帖后很快就找到了一个很好的工作答案!我只是把其他几个SO的答案组合在一起。对于那些找到比我的更简单的东西的人,一如既往地提前感谢你。
这是正确的:
export n
yes `python -c "import os; n=int(os.environ['n']); print(f'{\"0.0, \" * n}0.0')"` | head -n $k
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0在我看来,这仍然可能对其他数值程序员有所帮助。
https://stackoverflow.com/questions/62158477
复制相似问题