파일을 정렬하되 줄 쌍을 함께 유지하세요.

파일을 정렬하되 줄 쌍을 함께 유지하세요.

구조체 항목이 포함된 파일이 있습니다.

a1;b1;c1;
d1;e1;f1;g1
a2;b2;c2;
d2;e2;f2;g2

등.

이 파일을 g별로 정렬하고 싶지만 해당 g에 abc를 유지하고 싶습니다. 명령줄을 통해 이를 수행할 수 있는 좋은 방법이 있습니까? 지금 내가 생각할 수 있는 것은 다소 복잡한 Perl 스크립트를 작성하는 것뿐입니다.

답변1

행이 쌍으로 제공되고 첫 번째 행에 3개의 필드가 있고 두 번째 행에 4개의 필드가 있는 경우(두 번째 행에는 "g" 값이 포함됨):

$ sed -n 'N;s/\n//;p' your_file \
   | sort -t';' -k7 \
   | perl -F';' -ane '$,=";";print @F[0..2],"\n";print @F[3..$#F]'

sed섹션에서는 연속된 두 줄을 모두 결합하고 sort일곱 번째 필드의 입력을 정렬한 ;다음 마지막으로 perl각 줄을 2개의 부분으로 분할합니다. 하나는 3개의 필드가 있고 다른 하나는 4개의 필드가 있습니다.

답변2

데이터 구조가 동일하다고 가정하면 GNU sed 및 GNU awk를 사용하여 이를 수행할 수 있습니다. 예를 들면 다음과 같습니다.

# Separate records by an extra new-line
sed '2~2G' infile |

# Read records and use GNU awk's built-in sort on field 7
awk '
  BEGIN { PROCINFO["sorted_in"] = "@ind_str_desc" }
  { h[$7] = $0 }
  END { for(k in h) print h[k] }
' RS= FS='[;\n]+'

산출:

a2;b2;c2;
d2;e2;f2;g2
a1;b1;c1;
d1;e1;f1;g1

관련 정보