最大の月と年のファイルを取得します。

最大の月と年のファイルを取得します。

最大月の年のファイルをインポートする必要があります。

私たちのディレクトリには次のファイルがあります。

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

2つの変数を使用して、比較するファイル名と部分を保持できます。

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巡回時にファイル名が含まれます。

  • cut2番目のフィールドを選択すると、区切り文字は次のようになります。_

  • 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

関連情報