バスを個々のポートに拡張するスクリプトを取得します。

バスを個々のポートに拡張するスクリプトを取得します。

いくつかのバスを含む次のファイルがあります。

signal_a[79:74]                 No     No          No          INPUT
signal_b[83:81]                 No     No          No          INPUT
signal_c[91]                    No     No          No          INPUT

次のように個々のビットに拡張したいと思います。

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

sedまたはawkまたはを使用してどのように達成できますかperl

答え1

これはちょっと面倒ですが

perl -lne '
  ($a,$b) = ($2 == "" ? $1 : $2,$1) if /\[(\d+)(?:\:(\d+))?\]/; 
  for $n (reverse $a..$b) {
    print s/\[.*?\]/"[$n]"/re
  }
' file

答え2

また試み

$ 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

関連情報