使用 bash 或在 bash 中不可能的最小 python 位创建零的二维矩阵的 CSV 文件

这是一个数值数据科学应用程序。我需要在文件中创建一个零矩阵,用逗号分隔(在一行内)并以换行符结尾(在每行的末尾)。这个 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 变量。但是,(对我而言)很难正确编码以用 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

在这种情况下,将文字 9 更改为 python 中的变量更糟糕,并且给了我一些疯狂的东西,比如某种我绝对不想要的目录列表。


天涯尽头无女友
浏览 95回答 3
3回答

慕运维8079593

您的方法略有不同:n=10k=3yes "$(yes 0 | head -n "$n" | paste -s -d,)" | head -n "$k"如果需要逗号后的空格,则可以使用管道来sed 's/,/, /g'做到这一点。

GCT1015

在纯 bash 中:#!/usr/bin/env bashcols=$1rows=$2declare -a rowfor ((i = 0; i < cols; i++)); do&nbsp; &nbsp; row+=(0)doneIFS=, line="${row[*]}"for ((i = 0; i < rows; i++)); do&nbsp; &nbsp; echo "$line"done例子:$ ./demo.sh 10 30,0,0,0,0,0,0,0,0,00,0,0,0,0,0,0,0,0,00,0,0,0,0,0,0,0,0,0

烙印99

很抱歉回答我自己的问题,但正如经常发生的那样,我在发布后很快就找到了一个很好的工作答案!我只是将其他几个 SO 答案组合在一起。提前感谢其他人一如既往地发现比我更简单的事情。这工作正常:export nyes `python -c "import os; n=int(os.environ['n']); print(f'{\"0.0, \" * n}0.0')"` | head -n $k0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0在我看来,这仍然可能对其他数值程序员有所帮助。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python