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
.