결과

결과

저는 여러 파일의 모든 필수 데이터를 열로 출력하는 프로그램을 개발 중입니다. 문제는 내 프로그램이 여러 출력을 깔끔한 열로 정렬할 수 없다는 것입니다.

이것은 내 프로그램 기능입니다.

#!/bin/sh

function findFile
{
    while read -r LINE
    do
            find . -name "${LINE}" | grep "${LINE}" || echo "${LINE} not found"
    done < /path/to/fnames.txt > /path/to/Files.txt
}

findFile

function grepFile
{
    printf "ISA\t\tGS\tTrans\tSender ID\tReceiver ID\tINV PO Number\tASN PO Number\n"
    fmt="%-16s%-8s%-8s%-8s%-24s%-9s%-12s\n"
    while read -r LINE
    do
            gs=$(zgrep -oP 'GS.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.\K[\w\s\d]*' < $LINE | sort -u)
            isa=$(zgrep -oP 'ISA.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.\K[\w\s\d]*' < $LINE | sort)
            trans=$(zgrep -oP 'GE.\K[\w\s\d-]*' < $LINE | sort -u)
            sender=$(zgrep -oP 'ISA.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.\K[\w\s\d-]*' < $LINE | sort -u)
            receiver=$(zgrep -oP 'ISA.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.[^*]*.\K[\w\s\d-]*' < $LINE | sort -u)
            bigponumber=$(zgrep -oP 'BIG.[\w\s\d-]*.[\w\s\d]*.[\w\s\d]*.\K[\w\s\d-]*' < $LINE | sort -u)
            asnponumber=$(zgrep -oP 'PRF.\K[\w\s\d-]*' < $LINE | sort -u)
            printf "$fmt" "${isa}" "${gs}" "${trans}" "${sender}" "${receiver}" "${bigponumber}" "${asnponumber}"
    done < /path/to/Files.txt
    rm /path/to/Files.txt
}

grepFile

출력: 화면 왼쪽에 있는 숫자를 보셨나요? 구매주문번호입니다.

ISA             GS      Trans   Sender ID       Receiver ID     INV PO Number   ASN PO Number
100000107       1107    1       2035735845         AMAZON                       2IJW4EUG
100000018       1018    1       00116520M      5032337598                       0082313829
100000096       1096    7       001165208      6111470100                       0026-7684347-0551
0026-7684347-0557
0026-7684347-0580
0026-7684347-0587
0026-7684347-0589
0026-7684347-3803
0026-7684347-3804
100000580       1580    6       2035735845     TGTDVS                           1310548379
1310570020
1310590953
1310596065
1310598477
1310609258

나는 다음과 같이 보이기를 원합니다. INV PO 번호도 마찬가지입니다.

ISA             GS      Trans   Sender ID       Receiver ID     INV PO Number   ASN PO Number
100000107       1107    1       2035735845         AMAZON                       2IJW4EUG
100000018       1018    1       00116520M      5032337598                       0082313829
100000096       1096    7       001165208      6111470100                       0026-7684347-0551
                                                                                0026-7684347-0557
                                                                                0026-7684347-0580
                                                                                0026-7684347-0587
                                                                                0026-7684347-0589
                                                                                0026-7684347-3803
                                                                                0026-7684347-3804
100000580       1580    6       2035735845     TGTDVS                           1310548379
                                                                                1310570020
                                                                                1310590953
                                                                                1310596065
                                                                                1310598477
                                                                                1310609258

답변1

다음과 같이 이 작업을 수행할 수 있습니다.

grepFile | column -t -s $'\t' -o $'\t'

내가 제시한 제안에 따라 grepFile 함수가 수정되었다고 가정해 보겠습니다.

"alignCols"와 같은 다른 사용자 정의 함수를 생성하고 "grepFile" 함수의 출력을 전달합니다.

또한 명령문에서 "grepFile" 함수를 약간 수정합니다 printf.

function grepFile
{

    #*************** ADD THIS ********
    t=$'\t'; # TAB char
    #*********************************

    printf "ISA\t\tGS\tTrans\tSender ID\tReceiver ID\tINV PO Number\tASN PO Number\n"

    #*************** MODIFY THIS ********
    fmt="%s\t%s\t%s\t%s\t%s\t%s\t%s\n"
    #*********************************

    while read -r LINE
    do
     # ... keep the other statements just like before #

     # ************** MODIFY printf ****************
     printf "$fmt" \
        "${isa:-$t}"         \
        "${gs:-$t}"          \
        "${trans:-$t}"       \
        "${sender:-$t}"      \
        "${receiver:-$t}"    \
        "${bigponumber:-$t}" \
        "${asnponumber:-$t}";
     # *********************************************

    done < /path/to/Files.txt
    rm /path/to/Files.txt
}

function alignCols
{
sed -e '
1i\
.TS\
tab('$'\t'');\
l l l l l l l.
$a\
.TE
' - | tbl - | nroff -Tascii -ms | grep .
}

# And then...

grepFile | alignCols

결과

ISA         GS     Trans   Sender ID    Receiver ID   INV PO Number   ASN PO Number
100000107   1107   1       2035735845   AMAZON                        2IJW4EUG
100000018   1018   1       00116520M    5032337598                    0082313829
100000096   1096   7       001165208    6111470100                    0026-7684347-0551
                                                                      0026-7684347-0557
                                                                      0026-7684347-0580
                                                                      0026-7684347-0587
                                                                      0026-7684347-0589
                                                                      0026-7684347-3803
                                                                      0026-7684347-3804
100000580   1580   6       2035735845   TGTDVS                        1310548379
                                                                      1310570020
                                                                      1310590953
                                                                      1310596065
                                                                      1310598477

답변2

여기서 핵심은 컬럼 프로그램 cf를 사용하는 것입니다.사람 1 열

구분 기호 정의와 같은 몇 가지 간단한 옵션을 사용하여 필요에 따라 데이터를 정렬할 수 있습니다.

이 질문을 살펴볼 수도 있습니다. *nix에서 열 명령을 사용하여 목록 형식을 지정합니다.

관련 정보