Linuxでの正規表現の問題 - 日付の並べ替え[閉じる]

Linuxでの正規表現の問題 - 日付の並べ替え[閉じる]

正規表現の特定のフィールドは無視できます。問題は、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形式であるとします。MMDDYY

文字の並べ替えを使用して並べ替えることができます。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順序を変更するために使用されます。

おすすめ記事