답변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