【发布时间】:2026-01-26 09:10:02
【问题描述】:
我有一个固定长度的文件格式:
Name Age Party Role
---------- ---------- ------------------ --------------
Shubham 27 XYZ User
Drek 28 ABC Admin
Raj 23 USR User
现在我想编写一个 shell 脚本/命令来输出一个包含所有年龄
Party
-----------------
USR
我是 awk 和 shell 的新手。我尝试使用 awk 和 substr,但它太贵了,因为我的文件很大(> 200000 行,多列)。有没有一种巧妙的方法来做到这一点?
更新
任何字段中都可以有空格。真正的想法是该文件是一个固定长度的文件。所以每条记录的长度是固定的(姓名:10,年龄:10,部分:20,角色:10)。但是,记录中可以包含任何内容,包括空格和空格。例如:
Name Age Party Role
---------- ---------- ------------------ --------------
Shub A 27 XYZ & A User
Drek GH 28 ABC & C Admin
Raj 23 USR User
等等。 现在我想使用 Name 进行选择,这样我的脚本就会打印出 Name = "Shub A" 的 Party 记录。所以这里的输出应该是:
Party
-------------------
XYZ & A
【问题讨论】:
-
200000 行几乎算不上“巨大”。
-
关于您的更新,当字段或多或少固定时,awk 非常棒,如果所有字段都是动态的,它就会变得棘手。是否可以使文件成为 csv-one,即逗号分隔不同的列或类似的东西。那么这个问题就很容易解决了。
-
我可能可以使用 sed 用逗号替换多个空格。这将是一个单独的问题,正如我所说的,我对 shell 很陌生。
-
谢谢大家的回答。我使用了 cut 和 awk 的组合。
标签: parsing shell unix awk fixed