将包含以下列的输出文件转换为 CSV,并删除管道符

将包含以下列的输出文件转换为 CSV,并删除管道符

这是我的输出文件中的内容:

    v6_ntoa    |   v6_ntoa    |     id      | client_syn_packets
---------------+--------------+-------------+--------------------
 105.245.90.61 | 82.17.112.84 | 15426766476 |                  1

我希望将其转换为以下格式的 csv 文件:

105.245.90.61,82.17.112.84,15426766476,1

需要您的帮助(sed、awk 或任何其他方式)。我尝试了几种不同的方法,但无法删除管道和适当的间距。

答案1

使用磨坊主和尾巴,和奔跑

<input.txt tail -n +3 | mlr --csv --ifs "|" -N clean-whitespace

你有

105.245.90.61,82.17.112.84,15426766476,1

一些说明:

  • <input.txt tail -n +3仅输出您想要的记录
  • --ifs "|",设置字段分隔符
  • -N设置无航向输入和输出
  • clean-whitespace清理空白处

答案2

可能是最简单的:

$ sed -n '3s/ *| */,/gp' file
 195.245.90.61,62.17.112.84,15426766476,1

(但请注意,这确实留下了一个前导空格;如果有问题,您可以添加另一个替代来删除它)。

如果您想要更进一步,请使用 GNU awk 并将字段定义为任何非空格或竖线字符序列:

$ gawk 'BEGIN{FPAT="[^ |]+"; OFS=","} NR==3{$1=$1; print}' file
195.245.90.61,62.17.112.84,15426766476,1

或保留标题

$ gawk 'BEGIN{FPAT="[^ |]+"; OFS=","} NR%2{$1=$1; print}' file
v6_ntoa,v6_ntoa,id,client_syn_packets
195.245.90.61,62.17.112.84,15426766476,1

相关内容