这是我的输出文件中的内容:
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