Linux의 정규식 문제 - 날짜 정렬 [닫기]

Linux의 정규식 문제 - 날짜 정렬 [닫기]

정규식의 특정 필드는 무시될 수 있습니다. 문제는 FTP 서버에서 정렬된 파일의 출력이 있다는 것입니다. 문제는 FTP가 1년에 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 및/또는 정규식을 사용하여 날짜를 쌍으로 그룹화할 수 있습니까? 각 날짜 숫자마다 하나씩 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개 문자 세트( YY)를 교환합니다. ( ) 다음의 내용은 .txt변경되지 않습니다. 100518.txt181005.txt으로 변경됩니다 . 정렬 후에는 문자가 다시 교체됩니다.

스크립트는 파일 이름 목록이 올바른 형식의 이름만 포함하도록 필터링되었다고 가정합니다. 그렇지 않으면 일치 패턴이 더 복잡해져서 6자리만 일치하고 뒤에 .txt.

sort옵션이 없으면 가장 높은 날짜를 마지막에 넣습니다. sort -r순서를 바꾸는 데 사용됩니다.

답변2

타임스탬프가 필드 9에 있다고 가정하면 sort세 가지 날짜 필드를 구별할 수 있습니다.

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

관련 정보