正規表現の特定のフィールドは無視できます。問題は、FTPサーバーにソートされたファイルの出力があることです。問題は、FTPが年に6ヶ月以上のファイルを一覧表示しないことです。たとえば、これを並べ替えて020319
最新100518
の日付に基づいて一覧表示したい場合は、最初に並べ替えられます100518
。
FTP_FILES_LISTは、「ls」コマンドを使用してFTPサイトから取得したファイルの束を含むファイルです。私は興味のあるファイルだけをインポートするために "grep"を使います。
A="AT_20_10_REL_ARCA_"
more FTP_FILES_LIST | grep "$A[0-9][0-9][0-9][0-9][0-9][0-9].txt" | sort -k 9
-r-xr-xr-x 1 14 2000 34037013 Jan 17 00:45 AT_20_10_REL_ARCA_011719.txt
-r-xr-xr-x 1 14 2000 34036101 Jan 18 11:13 AT_20_10_REL_ARCA_011819.txt
-r-xr-xr-x 1 14 2000 34036564 Jan 25 01:09 AT_20_10_REL_ARCA_012519.txt
-r-xr-xr-x 1 14 2000 34041306 Feb 03 21:42 AT_20_10_REL_ARCA_020319.txt
-r-xr-xr-x 1 14 2000 34099207 Feb 08 03:15 AT_20_10_REL_ARCA_020819.txt
-r-xr-xr-x 1 14 2000 34099827 Feb 11 02:55 AT_20_10_REL_ARCA_021119.txt
-r-xr-xr-x 1 14 2000 34010091 Oct 05 00:42 AT_20_10_REL_ARCA_100518.txt
-r-xr-xr-x 1 14 2000 34025780 Nov 26 02:55 AT_20_10_REL_ARCA_112618.txt
-r-xr-xr-x 1 14 2000 34037370 Dec 19 22:10 AT_20_10_REL_ARCA_121918.txt
「sed」を使用すると、ソートする必要がある方法でソートしてはならないため、ソートされません。出力は次のとおりです。
more FTP_FILES_LIST | grep $A[0-9][0-9][0-9][0-9][0-9][0-9] | sed -E 's/^(..)(..)(..)/\3\1\2/' | sort | sed -E 's/^(..)(..)(..)/\2\3\1/'
-r-xr-xr-x 1 14 2000 34010091 Oct 05 00:42 AT_20_10_REL_ARCA_100518.txt
-r-xr-xr-x 1 14 2000 34025780 Nov 26 02:55 AT_20_10_REL_ARCA_112618.txt
-r-xr-xr-x 1 14 2000 34036101 Jan 18 11:13 AT_20_10_REL_ARCA_011819.txt
-r-xr-xr-x 1 14 2000 34036564 Jan 25 01:09 AT_20_10_REL_ARCA_012519.txt
-r-xr-xr-x 1 14 2000 34037013 Jan 17 00:45 AT_20_10_REL_ARCA_011719.txt
-r-xr-xr-x 1 14 2000 34037370 Dec 19 22:10 AT_20_10_REL_ARCA_121918.txt -> Wrong sort!
-r-xr-xr-x 1 14 2000 34041306 Feb 03 21:42 AT_20_10_REL_ARCA_020319.txt
-r-xr-xr-x 1 14 2000 34099207 Feb 08 03:15 AT_20_10_REL_ARCA_020819.txt
-r-xr-xr-x 1 14 2000 34099827 Feb 11 02:55 AT_20_10_REL_ARCA_021119.txt
sedおよび/または正規表現を使用して日付をペアにグループ化できますか?各日付数字ごとに1つずつ6つの[0-9]があります。正規表現またはsedを使用してペアで並べ替えることができる場合はどうなりますか?たとえば、100518は10、05、18をソートします。
を使用するとmore FTP_FILES_LIST | grep "$A[0-9][0-9][0-9][0-9][0-9][9].txt" | sort -k 9
回避策がありましたが、2018年のすべてのファイルを失いました。ここでフォーマットが変更されたので出力写真を追加しました!
答え1
例に基づいて、ファイル名が月、日、年のMMDDYY.txt
形式であるとします。MM
DD
YY
文字の並べ替えを使用して並べ替えることができます。sed
sed 's/\(....\)\(..\)/\2\1/'| sort | sed 's/\(..\)\(....\)/\2\1/'
または、拡張正規表現オプションをsed
サポートする場合-E
sed -E 's/(....)(..)/\2\1/'| sort | sed -E 's/(..)(....)/\2\1/'
最初は、sed
最初の4文字セット(MMDD
)と2番目の2文字セット(YY
)を交換します。 ( ) 以下の内容は.txt
変更されません。100518.txt
など181005.txt
に変更されます。ソート後、文字は再び置き換えられます。
スクリプトは、ファイル名のリストが正しい形式の名前のみを含むようにフィルタリングされていると仮定します。それ以外の場合は、一致パターンがより複雑になり、6桁だけが一致し、後に.txt
。
sort
オプションがない場合は、最も高い日付を最後に入れます。sort -r
順序を変更するために使用されます。
答え2
タイムスタンプがフィールド9にあると仮定すると、sort
3つの日付フィールドを区別できます。
sort -k9.24,9.25n -k9.20,9.21n -k9.22,9.23n FTP_FILES_LIST
以下は、GNUソートオプションを使用してサンプル入力を実行する例です。順序を決定するために連続して使用されるソートキーを表す一連の点線を表示できます--debug
。sort
-r-xr-xr-x 1 14 2000 34010091 Oct 05 00:42 AT_20_10_REL_ARCA_100518.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34025780 Nov 26 02:55 AT_20_10_REL_ARCA_112618.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34037370 Dec 19 22:10 AT_20_10_REL_ARCA_121918.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34037013 Jan 17 00:45 AT_20_10_REL_ARCA_011719.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34036101 Jan 18 11:13 AT_20_10_REL_ARCA_011819.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34036564 Jan 25 01:09 AT_20_10_REL_ARCA_012519.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34041306 Feb 03 21:42 AT_20_10_REL_ARCA_020319.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34099207 Feb 08 03:15 AT_20_10_REL_ARCA_020819.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34099827 Feb 11 02:55 AT_20_10_REL_ARCA_021119.txt
__
__
__
____________________________________________________________________________________
この方法でソートすることは、スペースで区切られた9番目のフィールドで始まるファイル名に依存するため、脆弱です。別のアプローチは、ファイル名パターン自体に依存することです。おそらく、下線で区切られた6番目のタイムスタンプがあります。
sort -t_ -k6.5,6.6n -k6.1,6.2n -k6.3n,6.4n FTP_FILES_LIST