Python 串联打印范围
提取为单个字符串Python 串联打印范围,python,awk,Python,Awk,提取为单个字符串 Number 1: Number 2: 55-60(a) Number 3: 43/32455, 225(c), 26/10533-10541 Number 4: 234(b) Number 5: Number 6: 643/54231 Number 7: 10(a), 162(b) Number 8: 742/12345,12346 (c=cross,b=bold,a=alpha) 值为“数字4”的数字将是234c4 等等: 打印范围 Number
Number 1:
Number 2: 55-60(a)
Number 3: 43/32455, 225(c), 26/10533-10541
Number 4: 234(b)
Number 5:
Number 6: 643/54231
Number 7: 10(a), 162(b)
Number 8: 742/12345,12346
(c=cross,b=bold,a=alpha)
值为“数字4”的数字将是234c4
等等:
打印范围
Number 2: 55-60(a)
Sorted :
alpha
55c2;56c2;57c2;58c2;59c2;60c2
Number 3: 26/10533-10541
cross
26c3@SP10533;26c3@SP10534;26c3@SP10535;26c3@SP10536;26c3@SP10537;26c3@SP10538;26c3@SP10539;26c3@SP10540;26c3@SP10541
一旦列出所有标记的输出(alpha、bold、cross/a、b、c)。
等等:
它将合并成一行作为预期输出(逗号分隔),如下所示
交叉检查的细目:
alpha
55c2;56c2;57c2;58c2;59c2;60c2;10c7
bold
234c4;162c7
cross
43c3@SP32455;225c3;26c3@SP10533;26c3@SP10534;26c3@SP10535;26c3@SP10536;26c3@SP10537;26c3@SP10538;26c3@SP10539;26c3@SP10540;26c3@SP10541;643c6@SP54231;742c8@SP12345;742c8@SP12346
现在,我使用一行脚本打印范围
for a in {10533..10541}; do echo $a | awk '{printf "26c3@SP%s;",$0}'; done
这是纯awk中的一个解决方案。它不是特别可读,我不相信awk是这个特殊情况下工作的正确工具。可能需要调整一些模式和/或行动。我是根据您的具体案例来制定解决方案的
BEGIN { RS = "\n|, |: " }
$1 ~ /^Number/ { sub(":", "", $2); current = $2 }
$1 ~ /^[0-9]+-[0-9]+\(a\)$/ { sub(/\(a\)$/, "", $1);
split($1, a, "-")
for (i=a[1]; i <= a[2]; i++)
alpha = alpha (alpha == "" ? "" : ";") sprintf("%dc%d", i, current)
}
$1 ~ /^[0-9]+\(a\)$/ { sub(/\(a\)$/, "", $1)
alpha = alpha (alpha == "" ? "" : ";") sprintf("%dc%d", $1, current)
}
$1 ~ /^[0-9]+\(b\)$/ { sub(/\(a\)$/, "", $1)
bold = bold (bold == "" ? "" : ";") sprintf("%dc%d", $1, current)
}
$1 ~ /^[0-9]+\/[0-9]+$/ { split($1, a, "/")
cross = cross (cross == "" ? "" : ";") sprintf("%dc%d@SP%d", a[1], current, a[2])
}
$1 ~ /^[0-9]+\/[0-9]+-[0-9]+$/ { split($1, a, "[/-]")
for (i=a[2]; i <= a[3]; i++)
cross = cross (cross == "" ? "" : ";") sprintf("%dc%d@SP%d", a[1], current, i)
}
$1 ~ /^[0-9]+\/[0-9]+,[0-9]+$/ { n = split($1, a, "[/,]");
for (i=2; i <= n; i++)
cross = cross (cross == "" ? "" : ";") sprintf("%dc%d@SP%d", a[1], current, a[i])
}
END { print "alpha"; print alpha ; print "bold" ; print bold ; print "cross" ; print cross }
BEGIN{RS=“\n |,|:”}
$1~/^Number/{sub(“:”,“,$2);当前=$2}
$1 ~/^[0-9]+-[0-9]+\(a\)$/{sub(/\(a\)$/,”,$1);
拆分($1,a,“-”)
对于(i=a[1];我欢迎使用Stack Overflow..请将您自己的代码添加到您的问题中。您至少需要显示您自己为解决此问题所做的研究。感谢提醒,我将添加自己的脚本,shortly@user10254032,感谢您在问题中添加您的努力,但您的示例输入和预期的示例输出不清楚,请在您的问题中添加关于获得预期输出的更清楚解释,谢谢。感谢您对此进行研究,我编辑了以下内容questions@user10254032,请您详细说明一下234c4
是如何生成的,逻辑方面的,谢谢。
alpha
55c2;56c2;57c2;58c2;59c2;60c2;10c7
bold
234c4;162c7
cross
43c3@SP32455;225c3;26c3@SP10533;26c3@SP10534;26c3@SP10535;26c3@SP10536;26c3@SP10537;26c3@SP10538;26c3@SP10539;26c3@SP10540;26c3@SP10541;643c6@SP54231;742c8@SP12345;742c8@SP12346
for a in {10533..10541}; do echo $a | awk '{printf "26c3@SP%s;",$0}'; done
BEGIN { RS = "\n|, |: " }
$1 ~ /^Number/ { sub(":", "", $2); current = $2 }
$1 ~ /^[0-9]+-[0-9]+\(a\)$/ { sub(/\(a\)$/, "", $1);
split($1, a, "-")
for (i=a[1]; i <= a[2]; i++)
alpha = alpha (alpha == "" ? "" : ";") sprintf("%dc%d", i, current)
}
$1 ~ /^[0-9]+\(a\)$/ { sub(/\(a\)$/, "", $1)
alpha = alpha (alpha == "" ? "" : ";") sprintf("%dc%d", $1, current)
}
$1 ~ /^[0-9]+\(b\)$/ { sub(/\(a\)$/, "", $1)
bold = bold (bold == "" ? "" : ";") sprintf("%dc%d", $1, current)
}
$1 ~ /^[0-9]+\/[0-9]+$/ { split($1, a, "/")
cross = cross (cross == "" ? "" : ";") sprintf("%dc%d@SP%d", a[1], current, a[2])
}
$1 ~ /^[0-9]+\/[0-9]+-[0-9]+$/ { split($1, a, "[/-]")
for (i=a[2]; i <= a[3]; i++)
cross = cross (cross == "" ? "" : ";") sprintf("%dc%d@SP%d", a[1], current, i)
}
$1 ~ /^[0-9]+\/[0-9]+,[0-9]+$/ { n = split($1, a, "[/,]");
for (i=2; i <= n; i++)
cross = cross (cross == "" ? "" : ";") sprintf("%dc%d@SP%d", a[1], current, a[i])
}
END { print "alpha"; print alpha ; print "bold" ; print bold ; print "cross" ; print cross }