【问题标题】:Shell remove a comma in a fileShell 删除文件中的逗号
【发布时间】:2017-11-13 06:29:34
【问题描述】:

我想删除分号之间的多个逗号的第一个/最后一个逗号。

澄清:我在文本文件中有一个逗号分隔的键:值记录,我希望它们加载到数据库中。在这些记录中,我有一些用逗号分隔的值,如下所示。所以,在我从每条记录中删除键之前,我想删除“,”,它位于名字和姓氏之间。

注意:所有的名字与名字和名字的格式含义不同,有些记录只有名字。

当前格式:

SNO:01, ID:123, 姓名: firstname, lastname, fname: firstname , lastname, 性别:male, age:42
SNO:02, ID:124, 姓名: name, fname: firstname , lastname, 性别:male, age:40
SNO:03, ID:125, 姓名: firstname , lastname, fname: name, sex:male, age:37
SNO:04, ID:126, Name: name, fname: name, sex:male, age:35

所需格式:

SNO:01,ID:123,姓名:名+姓,姓:名+姓,性别:男,年龄:42
SNO:02,ID:124,姓名:姓名,姓氏:名+姓,性别:男,年龄:40
SNO:03,ID:125,姓名:名+姓,姓氏:姓名,性别:男,年龄:37
SNO:04, ID:126, Name: name, fname: name, sex:male, age:35

我希望名字和姓氏就像名字一样。为了实现这一点,我想确保两个“:”之间只有一个逗号。

谢谢。

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅如何提问页面 (stackoverflow.com/help/how-to-ask) 以帮助澄清此问题。
  • sed 's/,//' file?
  • 在您的示例中,它不会同时删除两者吗?你说你想删除第一个和最后一个逗号,所以如果有两个它会删除两个......?澄清你的问题。

标签: bash shell awk sed


【解决方案1】:

你可以试试这个 awk。

awk -F: -vOFS=: '{for(i=1;i<=NF;i++)if($i ~ /[^,]*,[^,]*,.*/)sub(",","+",$i)}1' infile

字段分隔符 = : , 输出字段分隔符 = :

对于每个字段,查找 2 个逗号。

如果找到,将第一个替换为 +

1 用于打印行。

【讨论】:

    猜你喜欢
    • 2013-12-10
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多