ㅏ。以下のように行セットがあります。
cr_v8_sel0 : cross cp_v8_en, cp_sel0 {
ignore_bins ig_v8_sel0 = binsof(cp_v8_en) && binsof(cp_sel0) intersect {[0:3],[5:$]};
}
b.同じ行セットを複数回印刷し、10進文字列をsel0からsel31に変更したいと思います。
氏。例:注:sel0は行をsel1に変更して印刷します。そしてsel0からsel31に移動する必要があります。
cr_v8_sel0 : cross cp_v8_en, cp_sel0 {
ignore_bins ig_v8_sel0 = binsof(cp_v8_en) && binsof(cp_sel0) intersect {[0:3],[5:$]};
}
cr_v8_sel1 : cross cp_v8_en, cp_sel1 {
ignore_bins ig_v8_sel0 = binsof(cp_v8_en) && binsof(cp_sel1) intersect {[0:3],[5:$]};
}
d。一種のforループを使って印刷できますか?手でタイプする代わりに? sed、awk、または他のスクリプトコマンドを使用しますか?
ベストアンサー1
努力する:
awk '{print; for (i=1;i<=31;i++) {x=$0; gsub(/sel0/, "sel" i, x); print x;}}' RS="" file
たとえば、反復回数は 3 に制限されます。
$ awk '{print; for (i=1;i<=3;i++) {x=$0; gsub(/sel0/, "sel" i, x); print x;}}' RS="" file
cr_v8_sel0 : cross cp_v8_en, cp_sel0 {
ignore_bins ig_v8_sel0 = binsof(cp_v8_en) && binsof(cp_sel0) intersect {[0:3],[5:$]};
}
cr_v8_sel1 : cross cp_v8_en, cp_sel1 {
ignore_bins ig_v8_sel1 = binsof(cp_v8_en) && binsof(cp_sel1) intersect {[0:3],[5:$]};
}
cr_v8_sel2 : cross cp_v8_en, cp_sel2 {
ignore_bins ig_v8_sel2 = binsof(cp_v8_en) && binsof(cp_sel2) intersect {[0:3],[5:$]};
}
cr_v8_sel3 : cross cp_v8_en, cp_sel3 {
ignore_bins ig_v8_sel3 = binsof(cp_v8_en) && binsof(cp_sel3) intersect {[0:3],[5:$]};
}
どのように動作しますか?
print
これにより、元のバージョンがとして印刷されます
sel0
。for (i=1;i<=31;i++) {x=$0; gsub(/sel0/, "sel" i, x); print x;
これは
i
1から31まで繰り返し、置換を実行した後に結果を印刷します。RS=""
これは、awkに一連の段落全体を読むように指示します。ソースコードに空白行がないため、ソースコード全体を一度に読み取る効果があります。
複数行バージョン
awk '
{
print
for (i=1;i<=31;i++)
{
x=$0
gsub(/sel0/, "sel" i, x)
print x;
}
}
' RS="" file