버스를 개별 포트로 확장하는 스크립트를 얻으십시오.

버스를 개별 포트로 확장하는 스크립트를 얻으십시오.

일부 버스가 포함된 다음 파일이 있습니다.

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

관련 정보