【发布时间】:2021-06-27 21:46:27
【问题描述】:
我在 csv 文件中有以下内容:
| ID | Contact_id | Tags_id |
|---|---|---|
| "id114" | "" | "Tags_id3" |
| "id12" | "" | "Tags_id1" |
| "" | "" | "Tags_id3" |
| "id3353" | "contact_id8764" | "Tags_id5" |
| "id355" | "contact_id16" | "Tags_id6" |
| "" | "" | "Tags_id7" |
| "" | "" | "Tags_id3" |
| "" | "contact_id564" | "Tags_id2" |
| "" | "" | "Tags_id12" |
| "id12076" | "contact_id137" | "Tags_id7" |
| "" | "" | "Tags_id3" |
| "" | "" | "Tags_id5" |
| "" | "" | "Tags_id1" |
| ... | ... | ... |
用于测试的纯文本:
ID,Contact_id,Tags_id
"id114","","Tags_id3"
"id12","","Tags_id1"
"","","Tags_id3"
"id3353","contact_id8764","Tags_id5"
"id355","contact_id16","Tags_id6"
"","","Tags_id7"
"","","Tags_id3"
"","contact_id564","Tags_id2"
"","","Tags_id12"
"id12076","contact_id137","Tags_id7"
"","","Tags_id3"
"","","Tags_id5"
"","","Tags_id1"
预期结果:
| Contact_id | Tags_id |
|---|---|
| "contact_id8764" | "Tags_id5" |
| "contact_id16" | "Tags_id6,Tags_id7,Tags_id3,Tags_id2,Tags_id12" |
| "contact_id564" | "Tags_id6,Tags_id7,Tags_id3,Tags_id2,Tags_id12" |
| "contact_id137" | "Tags_id7,Tags_id3,Tags_id5,Tags_id1" |
| ... | ... |
纯文本的预期结果:
Contact_id,Tags_id
"contact_id8764","Tags_id5"
"contact_id16","Tags_id6,Tags_id7,Tags_id3,Tags_id2,Tags_id12"
"contact_id564","Tags_id6,Tags_id7,Tags_id3,Tags_id2,Tags_id12"
"contact_id137","Tags_id7,Tags_id3,Tags_id5,Tags_id1"
- 首先删除所有具有 ID 且没有 Contact_id 的行(如具有 id114 的行)。
- 在下一个 ID (id3353) 之前,删除 ID 下的所有行和没有 Contact_id(如 id12 下的行)。
- 第三,如果 ID 和 Contact_id 可用,则收集下面的标签,直到具有 Contact_id 的行中的下一个 ID。为ID下的所有Contact_id添加相同的Tags集合(Contact_id16和Contact_id564具有相同的Tags,属于id355。
- 第四删除ID列
我用 vim 宏尝试过,但没有任何成功。我知道 awk 可能更适合这项任务,但我仍在学习它,也无法做到。也许还有另一种方法可以解决此任务。我希望有人可以提供帮助。
【问题讨论】:
-
请以纯文本格式发布您的输入数据样本,以便轻松复制/粘贴以进行脚本测试。
-
@karakfa 你是对的,对不起。我会保留表格以便更好地理解。