首页 > 解决方案 > 将csv第1列中的前x个字符组合到第2列中的所有字符

问题描述

我一直在试图弄清楚如何为 CSV 中的每个实体创建一个“唯一”名称。如果我有以下内容: input.csv

CustomerName,ID
businessName1,123456
businessName2Could Be longer with spaces,23456
businessName3Could use - or other special chars,234567

我想要做的是删除完整的公司名称并创建一个“编码”(轻轻使用该术语)名称来隐藏完整的公司名称。

我一直在试图找出一个多合一的解决方案。

潜在输出.csv

CodedName
bus123456
bus23456
bus234567

我可以轻松地使用 cut 来获取 CSV 中每行的前几个字母/字节。这解决了我的问题的第 1 部分。第二部分是添加ID。我知道如果我使用前 3 个字符,它们看起来都相似 - 但是有人可以在更大的数据仓库中搜索的 ID 可以获取其余信息。

将数据清理到上述内容是一些巫术 - 但使用以下命令到达那里。

我几乎可以肯定这可以用 sed / awk 来完成——只是不熟悉所有标志来获得我需要的输出。

下面是我是如何做到这一点的。

awk '{gsub(/\"/,"")};1' Custom.csv | awk '{gsub(/\(/,"")};1' | awk '{gsub(/\)/,"")};1'  > custom_RC.csv

sed '1,2 d' custom_RC.csv | sed '1 d' | awk '{gsub(/\(/,"")};1' | awk '{gsub(/\)/,"")};1' |  awk '{gsub(/\"/,"")};1' | cut -f 1,4 -d ,

标签: bashcsvawksed

解决方案


你可以试试这个awk

awk -F, '{print (NR == 1 ? "CodedName" : substr($1, 1, 3) $2)}'  file.csv
CodedName
bus123456
bus23456
bus234567

推荐阅读