É bastante deselegante, mas
perl -lne '
($a,$b) = ($2 == "" ? $1 : $2,$1) if /\[(\d+)(?:\:(\d+))?\]/;
for $n (reverse $a..$b) {
print s/\[.*?\]/"[$n]"/re
}
' file
Eu tenho o seguinte arquivo que tem alguns barramentos:
signal_a[79:74] No No No INPUT
signal_b[83:81] No No No INPUT
signal_c[91] No No No INPUT
e eu quero expandi-lo para bits individuais da seguinte forma:
signal_a[79] No No No INPUT
signal_a[78] No No No INPUT
signal_a[76] No No No INPUT
signal_a[77] No No No INPUT
signal_a[76] No No No INPUT
signal_a[75] No No No INPUT
signal_a[74] No No No INPUT
signal_b[83] No No No INPUT
signal_b[82] No No No INPUT
signal_b[81] No No No INPUT
signal_c[91] No No No INPUT
como posso fazê-lo com sed
ou awk
ou perl
?
É bastante deselegante, mas
perl -lne '
($a,$b) = ($2 == "" ? $1 : $2,$1) if /\[(\d+)(?:\:(\d+))?\]/;
for $n (reverse $a..$b) {
print s/\[.*?\]/"[$n]"/re
}
' file
Tente também
$ awk '{split ($1, T, "[][:]"); for (i=T[3]?T[3]:T[2]; i<=T[2]; i++) {$1 = T[1] "[" i "]"; print}}' OFS="\t" file3
signal_a[74] No No No INPUT
signal_a[75] No No No INPUT
signal_a[76] No No No INPUT
signal_a[77] No No No INPUT
signal_a[78] No No No INPUT
signal_a[79] No No No INPUT
signal_b[81] No No No INPUT
signal_b[82] No No No INPUT
signal_b[83] No No No INPUT
signal_c[91] No No No INPUT
Tags text-processing