범위 목록을 파일의 값 목록에 효율적으로 매핑

범위 목록을 파일의 값 목록에 효율적으로 매핑

내 파일에는 범위로 작성된 값이 포함되어 있으며 이를 일반 목록으로 "매핑 해제"해야 합니다. 이를 효율적으로 수행하려면 어떻게 해야 합니까?

예:

141540000,141569999,1
147280000,147289999,0

첫 번째 열은 범위 시작 값이고, 두 번째 열은 범위 끝 값이며, 세 번째 열은 범위의 각 숫자에 해당하는 일부 데이터입니다.

내가 달성하고 싶은 결과의 예:

141540000, 1
141540001, 1
141540002, 1
... 
141569998, 1
141569999, 1
147280000, 0
147280001, 0
...
147289999, 0

가장 좋은 방법은 sed나 awk 같은 것을 사용하는 것 같은데 어떻게 해결해야 할지 모르겠습니다.

답변1

awk -F, '{for (i=$1;i<=$2;i++) print i ", " $3}' file

각 행에 대해 for 루프를 실행하고 숫자와 마지막 필드를 인쇄합니다.

답변2

Perl의 경우 다음을 사용하십시오.범위 연산자목록 컨텍스트에서:

perl -F, -ne 'print "$_, $F[2]" for ($F[0]..$F[1])' file

또는

perl -F, -ne 'print map { "$_, $F[2]" } ($F[0]..$F[1])' file

답변3

while IFS=, read -r start stop data <&3;do
  seq -f "%.0f, $data" "$start" "$stop"
done 3< file

seq명령은 시작 번호부터 중지 번호까지 1단계로 반복하면서 메시지를 인쇄합니다.

  • 데이터에는 서식 지정 특수 문자 %나 백슬래시 시퀀스가 ​​포함되어 있지 않습니다.

관련 정보