구조체 항목이 포함된 파일이 있습니다.
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