【发布时间】:2021-02-09 23:37:39
【问题描述】:
我一直试图弄清楚如何为 CSV 中的每个实体创建一个“唯一”名称。如果我有以下情况: 输入.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 ,
【问题讨论】:
-
你不需要用你的编码版本和全名创建一个地图文件吗?此外,减少对
awk '{gsub(/\"/,"");gsub(/\(/,"");gsub(/\)/,"")}' Custom.csv > custom_RC.csv等外部进程的调用(可能需要稍微清理一下。)(在这种情况下不需要;1)。并且可以减少到 1 或 2 个gsubs,使用(/srchTarg1|srchTarg2|..../,"",$0)。祝你好运。 -
和
sed 1,2 d | sed 1 d,这不是和sed 1,3 d一样吗?但这可以用 awk 来完成,即awk -F, 'NR >=3 {next} {gsub(...)。打印 $1,$4}`。祝你好运。