为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

天涯尽头无女友 2022-12-20 11:32:47
这是一个数值数据科学应用程序。我需要在文件中创建一个零矩阵,用逗号分隔(在一行内)并以换行符结尾(在每行的末尾)。这个 bash 代码是最接近的:l=`python -c "print(f'{\"0, \" * 9}0')"`  # 10 zeros comma separated in one lineyes $l | head -n 3  # print line 3 times0, 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就目前而言这很好,直到您尝试将两个文字 9 和 3 更改为 shell 变量。但是,(对我而言)很难正确编码以用 shell 变量 n=9 替换文字 9。我尝试使用 bash 和 python 但仍然无法正常工作。例如,这两种不同的尝试实际上对变量不起作用(对我而言):l=$(printf '0,%.0s' {1..$((n-1))}; printf '0')  # 100% bash codeyes $l | head -n $k  # print line 3 times0,00,00,0l=`python -c "print(f'{\"0, \" * 9}0')"`  # using a bit of python, 10 literal zeros comma separated in one lineyes $l | head -n 3  # print line 3 times0, 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在这种情况下,将文字 9 更改为 python 中的变量更糟糕,并且给了我一些疯狂的东西,比如某种我绝对不想要的目录列表。
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

您的方法略有不同:


n=10

k=3

yes "$(yes 0 | head -n "$n" | paste -s -d,)" | head -n "$k"

如果需要逗号后的空格,则可以使用管道来sed 's/,/, /g'做到这一点。


查看完整回答
反对 回复 2022-12-20
?
GCT1015

TA贡献1827条经验 获得超4个赞

在纯 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


查看完整回答
反对 回复 2022-12-20
?
烙印99

TA贡献1829条经验 获得超13个赞

很抱歉回答我自己的问题,但正如经常发生的那样,我在发布后很快就找到了一个很好的工作答案!我只是将其他几个 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

在我看来,这仍然可能对其他数值程序员有所帮助。


查看完整回答
反对 回复 2022-12-20
  • 3 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信