CSV 파일에서 일치 패턴을 기반으로 패턴과 일치하는 다른 값을 가져옵니다.

CSV 파일에서 일치 패턴을 기반으로 패턴과 일치하는 다른 값을 가져옵니다.

이에 대한 전문가의 조언이 필요합니다

AMOUNT,30,/AMOUNT,MESS,Am,/MESS,AMOUNT,30,/AMOUNT,TXN,209,/TXN  
MESS,SU,/MESS,TXN,200,/TXN,AMOUNT,70,/AMOUNT       
TXN,200,/TXN,AMOUNT,90,/AMOUNT,MESS,SUM,/MESS,AMOUNT,90,/AMOUNT   

OR이 생성되는 특별한 순서는 없지만 AMOUNT모든 행에는 두 값이 모두 있습니다. 일부 줄에는 TXN중복된 항목도 있습니다 .AMOUNT

다음 출력이 필요합니다

AMOUNT,30,/AMOUNT,TXN,209,/TXN   
AMOUNT,70,/AMOUNT,TXN,200,/TXN   
AMOUNT,90,/AMOUNT,TXN,200,/TXN    

누구든지 나를 도와줄 수 있다면 매우 도움이 될 것입니다.

답변1

awk -F ',' '
BEGIN { OFS = FS }
{
    a = t = "N/A"

    for (i = 1; i < NF; ++i)
        if ($i == "AMOUNT")
            a = $(i + 1)
        else if ($i == "TXN")
            t =$(i + 1)

    $0 = ""

    $1 = "AMOUNT"
    $2 = a
    $3 = "/AMOUNT"

    $4 = "TXN"
    $5 = t
    $6 = "/TXN"

    print
}' file

각 행의 쉼표로 구분된 필드에서 문자열 합계를 찾습니다 AMOUNT. 발견 TXN되면 다음 필드에 대한 데이터가 할당됩니다. 비슷한 방식으로 값을 할당합니다 . 값 중 하나라도 발견되지 않으면 문자열이 됩니다 .AMOUNTatTXNN/A

그런 다음 출력을 생성합니다.

더 짧은 버전:

awk -F ',' '
{
    a = t = "N/A"

    for (i = 1; i < NF; ++i)
        if ($i == "AMOUNT")
            a = $(i + 1)
        else if ($i == "TXN")
            t =$(i + 1)

    printf "AMOUNT,%s,/AMOUNT,TXN,%s,/TXN\n", a, t
}' file

출력 비트만 다릅니다. 출력하는 대신기록, 우리는 에 의해 생성된 문자열을 출력합니다 printf.

관련 정보