파일의 값 사이의 간격을 지우는 방법은 무엇입니까? (한 줄 코드가 더 나은 경우)
입력하다:
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