需要您对此的专家建议
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
和。TXN
当AMOUNT
找到时,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
。