다음과 같은 이름의 파일이 많이 있습니다.
n2+_PiU_w4_5348757.out
n2+_PiU_w2_5348755.out
n2+_PiU_w1_5348742.out
n2+_PiU_w1_5348729.out
n2+_PiU_w1_5348696.out
n2+_PiU_st3_w3_part6_5630814.out
n2+_PiU_st3_w3_part6_5630721.out
n2+_PiU_st3_w3_part5_5630720.out
n2+_PiU_st3_w3_part4_5630813.out
문제는 완전히 다른 이름을 가질 수 있으므로 이전 번호 (예: ID) .out
를 기준으로 정렬 해야 한다는 것입니다.
나는 비슷한 질문을 보았습니다 (세 번째 열을 기준으로 정렬,Linux 정렬 마지막 열), 하지만 사용할 수 없거나 필요에 맞게 sed
사용할 수 없습니다.awk
정렬하는 방법을 제안해 주실 수 있나요? 사용하는 것이 가장 좋습니다 bash
.
답변1
최근(>4.0) GNU awk의 경우 숫자(마지막에서 두 번째) 필드로 입력되는 연관 배열을 사용합니다.
printf '%s\0' * | gawk '
BEGIN {
RS="\000"; FS="[_.]";
PROCINFO["sorted_in"]="@ind_num_asc"
}
{
a[$(NF-1)]=$0
}
END {
for (k in a) print a[k]
}'
전임자.
printf '%s\0' * | gawk 'BEGIN{RS="\000"; FS="[_.]"; PROCINFO["sorted_in"]="@ind_num_asc"} {a[$(NF-1)]=$0} END {for (k in a) print a[k]}'
n2+_PiU_w1_5348696.out
n2+_PiU_w1_5348729.out
n2+_PiU_w1_5348742.out
n2+_PiU_w2_5348755.out
n2+_PiU_w4_5348757.out
n2+_PiU_st3_w3_part5_5630720.out
n2+_PiU_st3_w3_part6_5630721.out
n2+_PiU_st3_w3_part4_5630813.out
n2+_PiU_st3_w3_part6_5630814.out
마찬가지로 Perl 해싱을 사용하면 다음과 같습니다.
printf '%s\0' * | perl -F'[_.]' -0ne '
$h{$F[$#F-1]} = $_ }{ for $k (sort { $a <=> $b } keys %h) {print "$h{$k}\n"}
'
답변2
공으로 zsh
:
$ printf '%s\n' *_<->.out(noe'(REPLY=${REPLY##*_})')
n2+_PiU_w1_5348696.out
n2+_PiU_w1_5348729.out
n2+_PiU_w1_5348742.out
n2+_PiU_w2_5348755.out
n2+_PiU_w4_5348757.out
n2+_PiU_st3_w3_part5_5630720.out
n2+_PiU_st3_w3_part6_5630721.out
n2+_PiU_st3_w3_part4_5630813.out
n2+_PiU_st3_w3_part6_5630814.out
<->
: 일련의 숫자(<x-y>
제한 없음)- (...): 전역 한정자
n
: 숫자 순서oe'(code)'
: 다음 평가를 기준으로 정렬되었습니다code
.REPLY=${REPLY##*_}
: 정렬 키는 마지막 키 다음 부분입니다._
답변3
awk
+sort
+cut
콤비네이션:
awk -F'_' '{ $0=$NF OFS $0 }1' files_list.txt | sort | cut -d' ' -f2-
-F'_'
- 필드 구분 기호$NF
- 마지막 필드(예5348696.out
)$0=$NF OFS $0
- 추가 직접 정렬을 위해 현재 레코드 앞에$0
마지막 필드 값을 추가합니다(예: ).$NF
5348757.out n2+_PiU_w4_5348757.out
cut -d' ' -f2-
- 두 번째 필드부터 시작하는 필터 필드
산출:
n2+_PiU_w1_5348696.out
n2+_PiU_w1_5348729.out
n2+_PiU_w1_5348742.out
n2+_PiU_w2_5348755.out
n2+_PiU_w4_5348757.out
n2+_PiU_st3_w3_part5_5630720.out
n2+_PiU_st3_w3_part6_5630721.out
n2+_PiU_st3_w3_part4_5630813.out
n2+_PiU_st3_w3_part6_5630814.out