계산 간격

계산 간격

파일의 값 사이의 간격을 지우는 방법은 무엇입니까? (한 줄 코드가 더 나은 경우)

입력하다:

A    1-3
B    5-7

산출

A    1,2,3
B    5,6,7

지금까지 시도한 코드는 다음과 같습니다.

sed -i 's/-/\t/g' input #splits the digits to separated columns

awk '{print$1"\t"$3-$2+1}' input > output #prints key and interval width

그러나 간격 내의 값 개수만 계산할 수 있습니다. 예를 들어 출력은 다음과 같습니다.

A    3
B    3

답변1

개인적으로 저는 이 작업을 수행하기 위해 쉘의 중괄호 확장을 사용합니다.

$ while read a b; do echo $a $(eval echo {"$(sed 's/-/../' <<<$b)"}); done < file
A 1 2 3
B 5 6 7

또는 쉼표를 사용하여 값을 구분하세요.

$ while read a b; do 
    echo $a $(eval echo {"$(sed 's/-/../' <<<$b)"} | sed 's/ /,/g'); 
  done < file
A 1,2,3
B 5,6,7

awk oneliner를 요청했으므로 다음을 시도해 볼 수 있습니다.

$ sed 's/-/ /' file | 
    awk '{printf "%s ", $1; for(i=$2;i<=$NF-1;i++){printf "%d,", i}; print $NF}' 
A 1,2,3
B 5,6,7

또는 awk에서 모든 작업을 수행합니다.

$ awk '{gsub(/-/," ")}{printf "%s ", $1; 
                       for(i=$2;i<=$NF-1;i++){printf "%d,", i}; print $NF}' file
A 1,2,3
B 5,6,7

관련 정보