最大月の年のファイルをインポートする必要があります。
私たちのディレクトリには次のファイルがあります。
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
巡回時にファイル名が含まれます。cut
2番目のフィールドを選択すると、区切り文字は次のようになります。_
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