近い質問をたくさん読んだが、問題に対する解決策が見つからなかった。
現在、構造のテキストファイルがあります。
## 誰 <!--QR2Y;1;2023-04-18-->
だれ
quelqu'un, qui, quel
田中さんてだれですか。
« Qui est ce M. Tanaka ? »
## 歌う <!--T2B7;1;2023-04-18-->
うたう
chanter, réciter
ピアノに合わせて歌う。
« Chanter accompagné d'un piano. »
目的は、情報を交換して並べ替えることです。
- で始まる行から日本語の単語を取り、次の
##
2行に置き換えます。 - この行を削除した後、2行
- この日本語の単語を修正された
##
行の下に置きます。
このような結果を得るには
## quelqu'un, qui, quel <!--QR2Y;1;2023-04-18-->
誰
だれ
田中さんてだれですか。
« Qui est ce M. Tanaka ? »
## chanter, réciter <!--T2B7;1;2023-04-18-->
歌う
うたう
ピアノに合わせて歌う。
« Chanter accompagné d'un piano. »
構造は常に同じです。可変部分は<!--X0X0;0;000-00-00-->
常に変化する部分であり、時にはまったく存在しない部分である。
これはsed
解決策のようですが、ドキュメントに少し迷子になりました...
ベストアンサー1
ソリューションawk
- 同じ文書を使用して
awk
2回給紙 - 最初の実行時:
##
見つかったらjw
(日本語の単語)とその単語fw
(フランス語の単語)を配列として保存し、行番号(NR
)でインデックスを付けます。
- 2番目の実行では、次のことを行います。
- 行番号があることを確認し
fw
たら、日本語の単語をフランス語の単語に置き換えて、対応する日本語の単語を印刷します。 - 配置したばかりのフランス語の単語を含む行を除くすべての行を印刷します。
- 行番号があることを確認し
awk '
NR == FNR && /^##/ { jw[NR]=$2; nr=NR; }
NR == nr+2 {fw[NR-2]=$0}
NR>FNR {
if(FNR in fw) { $2 = fw[FNR]; print; print jw[FNR]; }
else { if (!(FNR-2 in fw)) print; }}
' file file
出力:
## quelqu'un, qui, quel <!--QR2Y;1;2023-04-18-->
誰
だれ
田中さんてだれですか。
« Qui est ce M. Tanaka ? »
## chanter, réciter <!--T2B7;1;2023-04-18-->
歌う
うたう
ピアノに合わせて歌う。
« Chanter accompagné d'un piano. »