文件的对角线输出

The*_*yer 6 text-processing

你将如何输出文件的对角线?

例如,我得到了一个包含以下内容的文件。

1,2,3,4,5
6,7,8,9,0
1,2,3,4,5
6,7,8,9,0
1,2,3,4,5
Run Code Online (Sandbox Code Playgroud)

输出应该看起来像:1 7 3 9 5或类似的东西。

我可以通过 cut (cut -d "," -f5 文件名) 输出一列,但我不确定要写什么才能只输出对角线。

ste*_*eve 7

awk 解决方案,不像@don_chrissti 解决方案那么优雅,但适用于非正方形的地方。

awk -F, '{a=a$++n" "}END{print a}' file
Run Code Online (Sandbox Code Playgroud)


Ser*_*nyy 5

Python 和 numpy

我们正在查看的输入数据可以被视为矩阵或二维数组。现在,如果我们从这个角度来看问题,有几种计算工具可用于处理矩阵。特别是,Python 的numpy模块允许这样做。因此,我们可以使用两件事 -loadtxt()函数和diagonal()提取所需的数据:

$ python -c 'import sys,numpy;a=numpy.loadtxt(sys.argv[1],dtype=int,delimiter=",");print( a.diagonal() )'  input.txt                                                                    
[1 7 3 9 5]
Run Code Online (Sandbox Code Playgroud)

现在,这是完成的大部分工作。为了使输出更漂亮,我们只需要将获得的数据转换为字符串,并从单个字符串中创建一个以空格分隔的字符串。像这样:

$ python -c 'import sys,numpy;a=numpy.loadtxt(sys.argv[1],delimiter=",");print(" ".join( [ str(int(i)) for i in a.diagonal() ]))'  input.txt                                            
1 7 3 9 5
Run Code Online (Sandbox Code Playgroud)

当然,所有这些都不必一次性完成。为了可读性,我们可以制作一个小脚本,它也将允许我们处理在命令行中作为参数给出的所有文件名:

$ python -c 'import sys,numpy;a=numpy.loadtxt(sys.argv[1],dtype=int,delimiter=",");print( a.diagonal() )'  input.txt                                                                    
[1 7 3 9 5]
Run Code Online (Sandbox Code Playgroud)