【问题标题】:Convert a list of IPs (with single quotes) to comma delimited将 IP 列表(带单引号)转换为逗号分隔
【发布时间】:2015-06-10 16:44:26
【问题描述】:

如何使用awk 编写脚本,将这样的IPs 字符串转换为逗号分隔。我有大约 7 万个 IP。

Current format - '114.124.35.252' '114.79.61.186' '39.225.242.17' '202.62.16.29'

Desired format - '114.124.35.252','114.79.61.186','39.225.242.17','202.62.16.29'

【问题讨论】:

标签: awk


【解决方案1】:

如果文件中没有其他带有空格的内容,您可以使用sedspace 替换为,。否则,请使用更多详细信息编辑您的问题。

sed 's/ /,/g' File

如果不是文件内容,使用这个:

sed 's/ /,/g' <<< $string     #string is the variable with the IP string

编辑:

AMD$ cat File
'114.124.35.252'
'114.79.61.186'
'39.225.242.17'
'202.62.16.29'

1.您可以使用tr(这也会将最后一个换行符替换为,。详情请参阅man tr

AMD$ tr '\n', ',' < File
'114.124.35.252','114.79.61.186','39.225.242.17','202.62.16.29',

2.否则,你可以使用这个awk命令:

AMD$ awk -v n=$(wc -l < File) '{if(NR!=n){ORS=","}else{ORS="\n"}}1' File
'114.124.35.252','114.79.61.186','39.225.242.17','202.62.16.29'

awk 的默认记录分隔符是 '\n'。将除最后一行之外的所有内容更改为 ,

【讨论】:

  • 谢谢大家的回答。
  • 感谢大家的回答。文本文件中的 IP 列表未使用空格格式化(当我以原始格式列出时,Stackoverflow 将其重建为行)。原来的列表都是这样用换行符列出的
    '114.124.35.252'
    '114.79.61.186'
    '39.225.242.17'
    '202.62.16.29'跨度>
  • 分享原始列表的链接 - dropbox.com/s/u0q8b1wtw65e7qy/ip.txt?dl=0
【解决方案2】:

试试:

$ awk -F- '{gsub("\047 ","\047,",$2)}1' OFS="-" file
Current format - '114.124.35.252','114.79.61.186','39.225.242.17','202.62.16.29'

【讨论】:

    【解决方案3】:

    惯用的 awk:

    $ awk -v OFS=, '{$1=$1}1' ip.txt
    '114.124.35.252','114.79.61.186','39.225.242.17','202.62.16.29'
    

    $1=$1

    重构输入行,用-v OFS=,定义的新输出文件分隔符替换默认的空白分隔符

    1

    是“真”模式,触发默认动作,即打印(现在重构的)行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 2019-01-06
      • 1970-01-01
      • 2017-06-04
      相关资源
      最近更新 更多