![如何打印文件的矩阵部分](https://linux22.com/image/94591/%E5%A6%82%E4%BD%95%E6%89%93%E5%8D%B0%E6%96%87%E4%BB%B6%E7%9A%84%E7%9F%A9%E9%98%B5%E9%83%A8%E5%88%86.png)
我有一个包含字符串和浮点数的文件。我想加载此文件,然后打印文件的矩阵部分以访问矩阵元素。
文件.文本
laimfnllvbms
ksdvkdv=ksmgfgmf
kfdjdj=4o53024
0 10
C -5.079679 -0.614855 0.628813
O -5.090496 -1.535841 -0.185383
N -4.068243 -0.015776 1.175251
H -4.152798 0.774414 1.777298
C -2.706356 -0.272545 0.750101
H -2.712997 -0.826000 -0.177284
C -2.003241 1.167450 0.660391
H -1.795397 1.550152 1.682476
H -2.809862 1.800846 0.233202
C -0.756939 1.208105 -0.169144
输出
-5.079679 -0.614855 0.628813
-5.090496 -1.535841 -0.185383
-4.068243 -0.015776 1.175251
-4.152798 0.774414 1.777298
-2.706356 -0.272545 0.750101
-2.712997 -0.826000 -0.177284
-2.003241 1.167450 0.660391
-1.795397 1.550152 1.682476
-2.809862 1.800846 0.233202
-0.756939 1.208105 -0.16914
矩阵元素 [1,1] = -5.079679
矩阵元素 [5,1] = -2.706356
答案1
假设数据始终是您上面提供的方式。
awk 'NF == 4 {$1="";print}' matrix.txt
这会打印包含 4 列数据的所有行,并清空第一列。
答案2
要向语法添加更多检查,您可以尝试如下操作。仅当第二个字段始终为负值时,这才有效。
awk -vOFS="\t" 'NF==4 && $2 ~ "^-[0-9]" {$1="";printf("%s\n", $0)}' matrix.txt
- -vOFS(使用 TAB 作为输出字段分隔符)
- 如果字段数为 4 并且第二个字段与正则表达式匹配。则将第一个字段留空并打印其余字段。
如果您有类似的数字
C 14.756939 1.208105 -0.169144
那么你可以使用$2 ~ "^-?[0-9]"
wich 来检查正值。