如何在bash中查找和打印特定字符

前端之家收集整理的这篇文章主要介绍了如何在bash中查找和打印特定字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这样的文件
AA,A=14,B=356,C=845,D=4516
BB,A=65,C=255,D=841,E=5133,F=1428
CC,A=88,B=54,C=549,F=225

我永远不知道在行中是否缺少A,B,C或D值.但我需要将此文件转换为:

AA,D=4516,-,-
BB,F=225

因此,如果缺少任何值打印 – 标记.我的计划具有相同数量的列以便于解析.我更喜欢awk解决方案.感谢您的任何建议或帮助.

我的第一次尝试是:

awk '{gsub(/[,]/,"\t")}; BEGIN{ FS = OFS = "\t" } { for(i=1; i<=NF; i++) if($i ~ /^ *$/) $i = "-" }; {print $0}'

但后来我注意到,缺少一些价值观.

编辑:

从我的标题我知道有值A,C,D,E,F ……

$cat file.txt
AA,F=225

$perl -F,-le '@k=(A..F);
   $op[0]=$F[0]; @op[1..6]=("-")x6;
   $j=0; for($i=1;$i<=$#F;){ if($F[$i] =~ m/$k[$j++]=/){$op[$j]=$F[$i]; $i++} }
   print join(",",@op)
   ' file.txt
AA,F=225

> -F,打开输入线,并保存到@F数组> -l从输入行中删除换行符,为输出添加换行符> @ k =(A..F);用A,B等初始化@k数组到F> $op [0] = $F [0]; @op [1..6] =( “ – ”)5233;使用@F的第一个元素初始化@op数组,剩余的六个元素为 – > for循环遍历@F数组,如果元素与相应索引中的@k数组元素匹配,后跟=,则更改@op元素> print join(“,”,@ op)打印@op数组,作为分隔符

原文链接:https://www.f2er.com/bash/386923.html

猜你在找的Bash相关文章