
최대 월 연도의 파일을 가져와야합니다.
우리 디렉토리에는 다음과 같은 파일이 있습니다.
Zmx_0416_control.txt
Zmx_0316_control.txt
Zmx_0416_control.txt
이제 이 파일이 2016년 4월에 속하므로 이 파일에서 파일을 가져와야 합니다 .
Zmx_0416_control.txt
파일 목록에서 가장 큰 파일( )을 식별하려면 Unix 명령이 필요합니다.
답변1
당신이 사용할 수있는 sort
:
ls Zmx* | sort -k 1.7n -k 1.5,1.6n
또는
ls Zmx* | sort -t _ -k 2.3n -k 2,2.2n
결론으로| tail -1
GNU에서 정렬:
comparison
:"[...] 한 쌍의 행은 다음과 같이 비교됩니다. sort는 차이가 발견되거나 남아 있는 필드가 없을 때까지 명령줄에 지정된 순서대로 연관된 정렬 옵션에 따라 각 필드 쌍을 비교합니다. [...] "
index-sort-field
또한보십시오POSIX 정렬.
답변2
덜 우아한 솔루션:
%m%y를 100*y+m으로 변환합니다(예: 0416->1604). 그런 다음 값으로 비교합니다.
for i in Z*
do
# convert %m%y to 100*y+m
current=$((100 * $(echo "$i"|cut -c 7-8) + $(echo "$i"|cut -c 5-6)))
if [[ $current > $max ]]; then
max=$current
maxstr=$i
fi
done
echo $maxstr
답변3
두 개의 변수를 사용하여 비교할 파일 이름과 부분을 보관할 수 있습니다.
max=; f=; { for i in *.txt; do d="$(cut -d_ -f2 <<<"$i")"; \
d_s="$(sed 's/\(..\)\(..\)/\2\1/' <<<"$d")"; \
[ "$d_s" -gt "$max" ] && max="$d_s" && f="$i"; done ;} && echo "$f"
max
파일 이름을 반복할 때 현재 최대값을 포함합니다.f
순회할 때 파일 이름을 포함합니다.cut
두 번째 필드를 선택하면 구분 기호는 다음과 같습니다._
sed
비교를 위해 월과 연도를 바꾸는 데 사용됩니다.
예:
$ ls -1
foobar
Zmx_0316_control.txt
Zmx_0416_control.txt
Zmx_0716_control.txt
$ max=; f=; { for i in *.txt; do d="$(cut -d_ -f2 <<<"$i")"; d_s="$(sed 's/\(..\)\(..\)/\2\1/' <<<"$d")"; [ "$d_s" -gt "$max" ] && max="$d_s" && f="$i"; done ;} && echo "$f"
Zmx_0716_control.txt