当您拥有的唯一信息就是位置时,查找特定位置的值

当您拥有的唯一信息就是位置时,查找特定位置的值

我有一个大约 16,000 行长的 csv 文件,有两个字段。第一个字段包含数值列表,第二个字段包含由分号分隔的名字和名称列表,例如

3,           Jack Mackie; Hanna Jones; Mike Freeland; Ollie Downs; Farrah Anderson; Judy John

9,           Jewel Woodley; Jean Sullivan; Marcia Robin; Kerry Morton; Joelle Armour; Zakiya Pulwarty; Karen Thornhill; Shurm Ahmet; Ed Aslan; Adam Condell; Zeliha Manners; Joan Johnson

5,           Haydn Smart; Andre Henry; Tamara Brownbill; Kelly Withers; Eden Anderson; Naomi Casa; Azaria Amritt; Jamile Newton; Nabahe Durand

第二个字段中列出的与第一个字段中的数字位置相对应的名称是团队领导者,例如第一行中的团队领导者是 Mike Freeland(位置 3),第二行中的团队领导者是 Ed Aslan(位置 9),第三排是伊登·安德森(Eden Anderson)(位置5)。我需要提取所有团队领导的名字。

我正在尝试编写一个 shell 脚本来提取团队领导的所有姓名,针对我的 csv 文件运行它,然后将其输出到一个新文件。

我一直在研究如何使用“grep”或“awk”加“FS”(FS指定分号作为分隔符而不是空格)来查找信息,但我不知道如何合并该值在第一个字段中作为选择标准。我见过的每个示例都使用这些命令来搜索已知值或字符串。然而,在这种情况下,我只知道值的位置(名字和姓氏)。我正在寻找正确的命令吗?

我无法想出一个剧本。如何提取团队领导者的姓名?

答案1

$ awk -F, '{split($2,names,";"); print names[$1]}' file.csv
 Mike Freeland
 Ed Aslan
 Eden Anderson

答案2

$ awk -F'[,;] ' '{print $($1 + 1)}' file
Mike Freeland
Ed Aslan
Eden Anderson

将字段分隔符更改为'[,;] ',即逗号或分号后跟空格字符。然后获取第一个字段的值$1,加一并打印该字段的值$(...)

答案3

使用米勒 ( mlr)并假设输入数据中没有空行:

$ mlr --csv -N put -q 'print clean_whitespace(splita($2, ";")[$1])' file
Mike Freeland
Ed Aslan
Eden Anderson

这会将无标头 CSV 输入中第二个字段中的值拆分为字符数组;,并提取第一个字段中的值给出的元素。在打印值之前,将从值中删除过多的空白字符。

相关内容