python - 使用 bash 创建一个 2D 零矩阵的 CSV 文件,或者在 bash 中不可能的最小的 python 位
问题描述
这是针对数值数据科学应用程序的。我需要在一个文件中创建一个零矩阵,用逗号分隔(在一行内)并以换行符结尾(在每行的末尾)。这个 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 变量。但是,(对我而言)很难正确编码以将文字 9 替换为 shell 变量 n=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 更改为变量更糟糕,并且给了我一些疯狂的东西,比如某种我绝对不想要的目录列表。
解决方案
只是您的方法略有不同:
n=10
k=3
yes "$(yes 0 | head -n "$n" | paste -s -d,)" | head -n "$k"
如果需要逗号后的空格,则可以使用管道来sed 's/,/, /g'
执行此操作。