我想知道是否可以在用'='分割之后使列表中的字符或右字符生成,最后每个字符也会被另一个'|'拆分和','。我尝试但失败了因为列表的数量没有修复。即使是C16也可以显示,输入中它将是16项。
你能给我一些提示吗?
输入
C1=34,C2=35,C3="99"
输出
C1|C2|C3#34,35,"99"
答案 0 :(得分:2)
使用-F
时,您可以将多个字符作为分隔符传递。该命令可能如下所示:
awk -F'[,=]' '{printf "%s|%s|%s#%s,%s,%s", $1,$3,$5,$2,$4,$6}' input.txt
我使用,
和=
作为分隔符。这样可以轻松访问各个值并使用printf
重新组合它们。
如果列数未知,则需要循环列。首先是作为名称的奇数列,然后是作为值的偶数列。我建议把它放到一个脚本中:
test.awk
BEGIN {
FS="[,=]"
}
{
for(i=1;i<=NF;i+=2){
if(i>=NF-1){
fmt="%s"
}else{
fmt="%s|"
}
printf fmt,$i
}
printf "#"
for(i=2;i<=NF;i+=2){
if(i>=NF-1){
fmt="%s"
}else{
fmt="%s,"
}
printf fmt,$i
}
}
然后执行它:
awk -f test.awk input.txt
答案 1 :(得分:2)
awk -F'[=,]' '
{
for (i=1;i<=NF;i+=2) {
printf "%s%s", $i, (i<(NF-1)?"|":"#")
}
for (i=2;i<=NF;i+=2) {
printf "%s%s", $i, (i<NF?",":ORS)
}
}
' file
C1|C2|C3#34,35,"99"
答案 2 :(得分:0)
awk '{sub(/C1=34,C2=35,C3="99"/,"C1|C2|C3#34,35,\"99\"")}1' file
C1|C2|C3#34,35,"99"