가장 큰 월과 연도의 파일을 가져옵니다.

가장 큰 월과 연도의 파일을 가져옵니다.

최대 월 연도의 파일을 가져와야합니다.

우리 디렉토리에는 다음과 같은 파일이 있습니다.

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

관련 정보