在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   

生成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和。TXNAMOUNT找到时,a分配下一个字段的数据。以类似的方式,t赋值TXN。如果找不到其中任何一个值,则它将是 string N/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

相关内容