그래서 다음과 같은 줄이 포함된 데이터 파일이 있습니다.
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