이에 대한 전문가의 조언이 필요합니다
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
.