내 파일에는 범위로 작성된 값이 포함되어 있으며 이를 일반 목록으로 "매핑 해제"해야 합니다. 이를 효율적으로 수행하려면 어떻게 해야 합니까?
예:
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단계로 반복하면서 메시지를 인쇄합니다.
- 데이터에는 서식 지정 특수 문자
%
나 백슬래시 시퀀스가 포함되어 있지 않습니다.