결과:

결과:

텍스트 파일을 변환하려고 하는데 원하는대로 정리하기가 좀 어려운 것 같습니다.

파일은 아래와 같습니다.

(0,{35=9000.0, 36=9000.0, 33=9000.0, 34=9000.0})

다음과 같이 재구성하고 싶습니다

0 33 9000.0
0 34 9000.0
0 35 9000.0
0 36 9000.0

저는 Shell을 처음 접했기 때문에 문제를 해결하려면 여러분의 도움이 필요합니다. 항목을 의 값으로 정렬하고 싶습니다 {}.

답변1

Perl의 솔루션은 다음과 같습니다.

cat b.txt 
(0,1,{35=9000.0, 36=9000.0, 33=9000.0, 34=9000.0})

perl -lne '$_=~/^\(([\d\,\.]+)\s*\{(.*)\}\)$/; @first=split /[,\s]/, $1; @second=split /,\s/, $2; map{($k, $v) = split "=", $_; $h{$k}=$v} @second; foreach $k (sort keys(%h)) { print join(" ", @first), " $k ",$h{$k}; }' b.txt
0 1 33 9000.0
0 1 34 9000.0
0 1 35 9000.0
0 1 36 9000.0

(물론, 이 Perl 프로그램은 한 줄 이상을 사용하고 변수에 의미 있는 이름을 지정하는 방법을 알고 있다면 읽기가 더 쉬울 것입니다)

답변2

암소 비슷한 일종의 영양해결책:

awk -F'[,=]' '{ gsub(/[({}) ]/,"",$0); for(i=2;i<NF;i+=2) a[$i]=$(i+1); 
                asorti(a,b); for(k in a) print $1,k,a[k] }' file
  • -F'[,=]'- 필드 구분 기호

  • gsub(/[({}) ]/,"",$0)- 불필요한 문자 제거

  • for(i=2;i<NF;i+=2) a[$i]=$(i+1)- 값 쌍을 배열로 수집a

  • asorti(a,b)- a키를 기준으로 배열 정렬


산출:

0 33 9000.0
0 34 9000.0
0 35 9000.0
0 36 9000.0

답변3

  1. 각 입력 줄에 대해 $n<= 선행 쉼표 앞의 10진수 값입니다.
  2. %h해당 키는 =왼쪽 숫자와 오른쪽 값의 해시입니다.
  3. 그런 다음 키를 숫자로 정렬하고 $n, key, corresp를 인쇄합니다. 값.
  4. $,= OFS<= $"= 출력 목록 구분 기호, 기본값은 공백입니다.

perl -lne '$,=$";
   ($n, %h) = ( /^\((\d+),/, /(\d+)=([^,}]+)/g );
   print $n, $_, $h{$_} for sort { $a <=> $b } keys %h;
' yourfile

결과:

0 33 9000.0
0 34 9000.0
0 35 9000.0
0 36 9000.0

관련 정보