【问题标题】:how to split the colon(:) separated string value into next column in csv file using awk or sed如何使用 awk 或 sed 将冒号(:) 分隔的字符串值拆分为 csv 文件中的下一列
【发布时间】:2020-08-27 15:24:46
【问题描述】:

我有以下数据,我想将冒号(:) 分隔值拆分到下一列

样本数据

htttp://example.com, 80
http://lookup/bin/search, 80
testecho345.unix.abc1200.org:8115,80
century.testing.external-abc03:6112,80
century.testing.external-abc03:6112,80
testecho345.unix.abc1200.org:8115,80
testecho345.unix.abc1200.org:8117,80

期望的输出

htttp://example.com, 80
http://lookup/bin/search, 80
testecho345.unix.abc1200.org,8115
century.testing.external-abc03,6112
testecho345.unix.abc1200.org,8117

注意:如果 http 则打印 80,https 则打印 443,如果 URL 中有任何数字,则打印该数字而不是 80

在 AWK 命令下尝试过,但没有得到预期的输出。

awk '{split($0,a,":"); print a[1],a[2]}'

同时删除重复项

提前感谢您的帮助。

【问题讨论】:

  • 你有split("|"..),而你应该有split(":",...)。祝你好运。
  • 我也试过了,但没有运气@shellter
  • 您希望| 如何拆分除以: 的字段。请总是展示你最好的作品。您的意外输出是否与我在您的数据中看到的尾随 ,80 有关?你也需要sub(/,80/,"", $0)。祝你好运。
  • 你的输入是什么样的?
  • 您也想删除原来的第二列吗? cut -d, -f1 input.csv | tr : ,

标签: shell if-statement awk sed


【解决方案1】:
awk -F'[:,]' '!a[$0]++{print $1","$2}'

这将根据我对您的要求的最佳解释起作用:

  • 没有重复
  • 冒号后的字段变成了自己的 CSV 字段
  • 删除的最后一列

概念证明

$ awk -F'[:,]' '!a[$0]++{print $1","$2}' < /path/to/input
testecho345.unix.abc1200.org,8115
century.testing.external-abc03,6112
testecho345.unix.abc1200.org,8117

请注意,您想要的输出仍然显示重复,我假设这是一个错误。

【讨论】:

  • 谢谢,我正在尝试。
【解决方案2】:

这是我通过 sed 的尝试。它不照顾骗子。您可以轻松地使用一些 Unix 命令来消除欺骗,但这不是您所要求的。也许其他人知道如何通过 sed 做到这一点?

sed 's/\(.*\):\(.*\),.*/\1,\2/'

$ sed 's/\(.*\):\(.*\),.*/\1,\2/' 文件名 testecho345.unix.abc1200.org,8115 Century.testing.external-abc03,6112 Century.testing.external-abc03,6112 testecho345.unix.abc1200.org,8115 testecho345.unix.abc1200.org,8117 $

【讨论】:

  • “这不是你所要求的”是什么意思? OP 明确要求进行重复数据删除,并在所需的输出中也显示了这一点。由于这个原因,我几乎对你的答案投了反对票,但后来我意识到这是一个(部分)正确答案。请编辑您的答案以删除关于 OP 要求的虚假陈述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多