요일별로 정렬하는 방법은 무엇입니까? [복사]

요일별로 정렬하는 방법은 무엇입니까? [복사]

나는 방금 찾은 아래 프로젝트와 매우 유사한 프로젝트를 진행 중이므로 다른 사람이 다시 읽는 데 문제를 일으키고 싶지 않지만 내가 찾은 질문에서최고의 답변사용자는 라는 추가 파일을 생성해야 하는데 file3저는 생성하고 싶지 않습니다. 나는 또한 grep명령에 대해 생각하고 있으며 while 루프 사용에 대해서도 생각하고 있습니다. 이 스크립트를 실행하는 방법이 있는 사람이 있나요?

요일별로 정렬하는 방법은 무엇입니까?

즉, 문제는 대체 솔루션을 제공하는 것입니다.이 답변추가 파일을 생성할 필요가 없습니다( file3예제 참조).

답변1

때로는 좋은 일반적인 솔루션이 있을 수도 있고, 때로는 일주일이 7일로 고정되어 있는 경우 하드코딩하는 것이 쉽고 분명합니다.

입력 파일이 주어지면 (링크된 질문에서):

Name      On-Call     Phone
Carol     MONDAY      248.344.5576
Bob       TUESDAY     313.123.4567
Alice     WEDNESDAY   616.556.4458
Dave      THURSDAY    734.838.9800
Nobody    FRIDAY      634.296.3356
Mary      SATURDAY    313.449.1390
Ted       SUNDAY      248.496.2204

다음 "행"은 요일별로 정렬됩니다.

$ { sed -n 1p input; 
    for d in SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY
    do grep " $d " input || printf "%-10s%-12s888.000.8888\n" "Nobody" "$d"; done }
Name      On-Call     Phone
Ted       SUNDAY      248.496.2204
Carol     MONDAY      248.344.5576
Bob       TUESDAY     313.123.4567
Alice     WEDNESDAY   616.556.4458
Dave      THURSDAY    734.838.9800
Nobody    FRIDAY      634.296.3356
Mary      SATURDAY    313.449.1390

중괄호는 { ... }명령을 함께 그룹화합니다(필요한 경우 출력을 새 파일로 리디렉션할 수 있음). 명령은 sed헤더를 인쇄하고 루프는 원하는 순서대로 매일 제공합니다 for.grep

이는 하드코드된 요일 이름 집합이 있고 헤더의 필드 이름과 일치하는 요일이 없다는 사실을 활용합니다. 헤더가 일치할 경우 내부를 다음과 같이 변경할 수 있습니다 grep.

sed 1d input | grep " $d "

두 번째 열의 요일과 더 정확하게 일치하는 또 다른 옵션은 (내부 루프의 경우) 다음과 같습니다.

awk -v day=$d '$2 == day' input

관련 정보