В файле CSV на основе шаблона сопоставления извлеките другое значение, соответствующее шаблону

Раковина = динамики, наушники

Источник = микрофон

0
06.02.2020, 10:07
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в полях, разделенных запятыми -каждой строки. Когда AMOUNTнайдено, aприсваиваются данные следующего поля. Аналогичным образом tприсваивается значение TXN. Если какое-либо из значений не может быть найдено, это будет строка 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.

1
28.04.2021, 23:24

Теги

Похожие вопросы