각 숫자에 대한 범위 및 출력 라인 확장

각 숫자에 대한 범위 및 출력 라인 확장

그래서 다음과 같은 줄이 포함된 데이터 파일이 있습니다.

class subject
1-2   x
3     y
4-5   a

클래스 열에 지정된 범위를 추출하고 범위에 표시된 만큼 주제의 텍스트를 인쇄해야 합니다. 나는 이런 것을 받을 자격이 있다

class subject
1     x
2     x
3     y
4     a
5     a

답변1

사용 awk:

awk '{ if ( split($1, range,"-")>1 ){
           for(i=range[1]; i<=range[2]; i++) { print i, $2; };
           next;
       };
     }1' infile

split()첫 번째 문자 열을 사용 -하고 첫 번째 및 두 번째 인덱스를 루프 내 범위의 시작과 끝으로 사용하고 매번 범위에 걸쳐 동일한 줄을 증분적으로 인쇄한 다음 next줄을 읽고 범위가 없으면 동일한 작업을 수행합니다. awk의 기본 인쇄 작업을 사용하여 행을 출력합니다 1.

범위를 나타내기 위해 대시 외에 다른 문자가 있는 경우 split()함수의 세 번째 매개변수를 수정하여 이를 언급할 수 있습니다. 예를 들면 다음과 같습니다.

split($1, range, /-|,|\.\./)

-, ,..범위 문자로 처리됩니다 .

입력 예(탭으로 구분):

class   subject
1,2     x
3       y
4-5     a
3..6    z

출력은 , 및 범위 구분 기호를 split()인식하도록 수정됩니다.-,..

class  subject
1      x
2      x
3      y
4      a
5      a
3      z
4      z
5      z
6      z

관련 정보