korn 쉘에서 특정 출력을 얻기 위해 두 파일을 병합하는 스크립트를 작성하는 방법은 무엇입니까? [복사]

korn 쉘에서 특정 출력을 얻기 위해 두 파일을 병합하는 스크립트를 작성하는 방법은 무엇입니까? [복사]

현재 유닉스에서 두 파일을 병합하려고 합니다.

첫 번째 파일:

Tom 313.455.6786
Deena 313.899.7400
Will 313.845.5633
Nancy 313.676.9445
Kelly 313.611.4242
John 313.908.3858

두 번째 파일:

Deena Tuesday
Will Monday
Kelly Sunday
John Wednesday
Tom Thursday
Nancy Saturday

저는 korn 쉘로 스크립트를 작성하고 있으며 for 루프와 배열 및 모든 재즈를 포함해야 합니다.

이것이 내가 지금까지 가지고 있는 것입니다:

#!/bin/ksh
file1=/home/file1
file2=/home/file2
set -A name
set -A phone
set -A day

for input in `cat file1| cut -d " " -f1`
        do
        name=$input
done

for input2 in `cat file1|cut -d " " -f2`
        do
        phone=$input2
done

    for input3 in `cat file2|cut -d " " -f2`
            do day=$input3
            week= "Monday Tuesday Wednesday Thursday Friday Saturday Sunday"
            for day in $week
            do
            echo $day\n
            day=$i
            done
    done
    printf "%s\t%-12s\t%s\n" "Name" "On-Call" "Phone"; join < (sort file1) <
    (sort file2) | tr ' ' '\t'

이 스크립트는 다음과 같은 결과를 제공합니다.

Name    On-Call        Phone
Deena   313.899.7400   Tuesday
John    313.908.3858   Wednesday
Kelly   313.611.4242   Sunday
Nancy   313.676.9445   Saturday
Tom     313.455.6786   Thursday
Will    313.845.56334  Monday

이 코드는 평일이 아닌 이름을 기준으로 알파벳순으로 파일을 정렬합니다. 이것이 바로 제가 필요한 것입니다. 또한 통화 중 출력과 전화 출력을 반전시킵니다.

다음과 같이 보이려면 최종 파일이 필요합니다.

Name    On-Call    Phone
Will    Monday     313.845.5633
Deena   Tuesday    313.899.7400
John    Wednesday  313.908.3858 
Tom     Thursday   313.455.6786  
Nobody  Friday     313.555.3454   
Nancy   Saturday   313.676.9445 
Kelly   Sunday     313.611.4242

답변1

이를 사용하는 것은 awk셸을 사용하는 것보다 간단합니다.

awk '
  BEGIN { fmt = "%-8s%-11s%s\n" ; printf fmt, "Name", "On-Call", "Phone" }
  NR==FNR { a[$1] = $2 ; next }
  { printf fmt, $1, $2, a[$1] }
' firstfile secondfile

(이 프로그램은 Kornshell에서 호출할 수 있습니다.)

참고: 출력 레코드의 순서는 의 레코드 순서와 일치합니다 secondfile. 따라서 레코드를 평일별로 정렬하려면 레코드 순서를 조정하세요 secondfile(그렇지 않으면 더 복잡한 프로그램이 필요합니다).

관련 정보