bash - 将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 ,
解决方案
你可以试试这个awk
:
awk -F, '{print (NR == 1 ? "CodedName" : substr($1, 1, 3) $2)}' file.csv
CodedName
bus123456
bus23456
bus234567
推荐阅读
- c# - “/”应用程序中的服务器错误。页面中只能添加一个 ScriptManager 实例
- angular - Angular 9 CDK 无限滚动使用 scrolledIndexChange 加载更多数据
- javascript - 如何在 JavaScript 数学中使用小数?
- react-native - 如何在 react-native-document-picker 中仅选择 mp3 文件?
- sql - SQL 中的 NVL 函数
- c# - 数据模板内但来自另一个数据上下文的 WPF 绑定
- java - “字段列表”中的未知列“鉴别器”
- graphql - AWS Amplify Datastore - 如何在架构中创建账户 > 用户授权规则?
- reactjs - Firestore 文档数据提取
- webpack - 在“copy-webpack-plugin”(Webpack)之后访问compilation.assets