これには専門家のアドバイスが必要です
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
と、次のフィールドのデータが割り当てられます。同様に値を割り当てます。いずれかの値が見つからない場合は文字列になります。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
。