Linux
文本文件:查找字元串,將字元串欄位保存到 var,查找第二個字元串,用 var 替換欄位,重複到結束
我認為這最好用 AWK 來完成,但不確定。它整天困擾著我如何做到這一點。我有一個文本文件,行中的欄位之間帶有 * 分隔符。我需要搜尋以 L111Z 開頭的行並將值保存到以 1Z 開頭但不包括下一個 * 的變數或緩衝區(即行上的第二個欄位),在第一種情況下,這將是 1ZXDF430。然後我需要轉到以 BGN 開頭的下一行並將字元串 QVD(即該行的第三個欄位)替換為變數的值。我需要對文件中的所有 L111Z 和以下 BGN 行執行此操作。如果可能的話,最好輸出一個新文件而不是覆蓋輸入文件。
輸入文件
xxx L11*123456*CR yyy L11*1ZXDF430*2I*04 zzz BGN*00*QVD*123456 fff L11*768907*CR L11*12345678*CR xxx L11*1ZXDF499*2I*04 zzz BGN*00*QVD*123456 xxx
結果輸出文件
xxx L11*123456*CR yyy L11*1ZXDF430*2I*04 zzz BGN*00*1ZXDF430*123456 fff L11*768907*CR L11*12345678*CR xxx L11*1ZXDF499*2I*04 zzz BGN*00*1ZXDF499*123456 xxx
假設
BGN
在 each 之後有一個L11*1Z
,那麼你應該可以使用$ awk 'BEGIN{OFS=FS="*"} /^L11\*1Z/ {x = $2} /^BGN/ {$3 = x} 1' file xxx L11*123456*CR yyy L11*1ZXDF430*2I*04 zzz BGN*00*1ZXDF430*123456 fff L11*768907*CR L11*12345678*CR xxx L11*1ZXDF499*2I*04 zzz BGN*00*1ZXDF499*123456 xxx