あなたのすべてがうまくいくことを願っています!
これが私が達成したいものです:
次の行があります。
2022-10-19 09:12:39.174 WRITING bytes(2566), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:39.334 WRITING bytes(4301), indexname(20220601_cfgsys_017507001635)
2022-10-19 09:12:39.334 Sent bytes (2566) successfully
2022-10-19 09:12:39.334 WRITING bytes(1293), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:39.398 Sent bytes (4301) successfully
2022-10-19 09:12:39.398 WRITING bytes(7285), indexname(20220601_cfgsys_017507001635)
2022-10-19 09:12:39.890 Sent bytes (1293) successfully
2022-10-19 09:12:39.890 WRITING bytes(4289), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:40.123 Sent bytes (7285) successfully
内部の値を取得したい。インデックス名「WRITING」に一致する行に角かっこを追加し、「Sent bytes」に一致する行の末尾に追加します。バイトブラケットのマッチング。
たとえば、希望の出力は次のようになります。
2022-10-19 09:12:39.174 WRITING bytes(2566), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:39.334 WRITING bytes(4301), indexname(20220601_cfgsys_017507001635)
2022-10-19 09:12:39.334 Sent bytes (2566) successfully 20220701_cfgsys_017507001635
2022-10-19 09:12:39.334 WRITING bytes(1293), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:39.398 Sent bytes (4301) successfully 20220601_cfgsys_017507001635
2022-10-19 09:12:39.398 WRITING bytes(7285), indexname(20220601_cfgsys_017507001635)
2022-10-19 09:12:39.890 Sent bytes (1293) successfully 20220701_cfgsys_017507001635
2022-10-19 09:12:39.890 WRITING bytes(4289), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:40.123 Sent bytes (7285) successfully 20220601_cfgsys_017507001635
角かっこ内の2つの値(バイト名とインデックス名)を取得する方法を知っています。
cat test.txt | grep "WRITING" | awk -F"[()]" '{print $2" "$4}'
$2 = 括弧内のバイト値 $4 = 括弧内のインデックス名の値
ただし、必要な行に追加することはできません。次の行(「WRITING」の後ろ)で「Sent bytes」文字列を検索し、$ 2は「Sent bytes」行の$ 2と等しく、$ 4を追加する必要があります。 「すでにバイトを送る」行末で
どんな助けでも大変感謝します!
よろしくお願いします!
答え1
awkを使用してください。
$ cat tst.awk
BEGIN { FS = "[() ]+" }
($3 == "WRITING") && ($7 == "indexname") { idx[$5] = $8 }
(($3" "$4) == "Sent bytes") && ($5 in idx) { $0 = $0 OFS idx[$5] }
{ print }
$ awk -f tst.awk file
2022-10-19 09:12:39.174 WRITING bytes(2566), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:39.334 WRITING bytes(4301), indexname(20220601_cfgsys_017507001635)
2022-10-19 09:12:39.334 Sent bytes (2566) successfully 20220701_cfgsys_017507001635
2022-10-19 09:12:39.334 WRITING bytes(1293), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:39.398 Sent bytes (4301) successfully 20220601_cfgsys_017507001635
2022-10-19 09:12:39.398 WRITING bytes(7285), indexname(20220601_cfgsys_017507001635)
2022-10-19 09:12:39.890 Sent bytes (1293) successfully 20220701_cfgsys_017507001635
2022-10-19 09:12:39.890 WRITING bytes(4289), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:40.123 Sent bytes (7285) successfully 20220601_cfgsys_017507001635
答え2
使用awk
$ awk -F"[()]" '/indexname/{var=$4}/Sent bytes/{$(NF+1)=var}1' input_file
2022-10-19 09:12:39.174 WRITING bytes(2566), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:39.334 WRITING bytes(4301), indexname(20220601_cfgsys_017507001635)
2022-10-19 09:12:39.334 Sent bytes 2566 successfully 20220601_cfgsys_017507001635
2022-10-19 09:12:39.334 WRITING bytes(1293), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:39.398 Sent bytes 4301 successfully 20220701_cfgsys_017507001635
2022-10-19 09:12:39.398 WRITING bytes(7285), indexname(20220601_cfgsys_017507001635)
2022-10-19 09:12:39.890 Sent bytes 1293 successfully 20220601_cfgsys_017507001635
2022-10-19 09:12:39.890 WRITING bytes(4289), indexname(20220701_cfgsys_017507001635)
2022-10-19 09:12:40.123 Sent bytes 7285 successfully 20220701_cfgsys_017507001635