awkを使用して2番目のファイルの内容を挿入します。

awkを使用して2番目のファイルの内容を挿入します。

.xmlを使用して、完全な2番目のファイルコンテンツ(ログ)をXML<log>タグに追加しようとしていますawkFS="\n" RS="\n\n"最初の入力ファイルに合ったファイルを使用しているため、両方の入力ファイルを1つにマージすることはできません。私のawkコードの間にどの部分を含めるべきかわかりません。<log>WHAT_TO_FEED_HERE?</log>

どんなアドバイスでもとても役に立ちます。

入力ファイル1:

Sara
123
[email protected]

John
456
[email protected]

入力ファイル2:

#This is first line along with # symbol

#There were two blank lines spaces above
#Candidatedata1 values

#Some more random text

最終出力は次のようになります。

<name>Sara</name>
<id>123</id>
<email>[email protected]</email>
<log>
#This is first line along with # symbol

#There were two blank lines spaces above
#Candidatedata1 values

#Some more random text
</log>

<name>John</name>
<id>456</id>
<email>[email protected]</email>
<log>
#This is first line along with # symbol

#There were two blank lines spaces above
#Candidatedata2 values

#Some more random text
</log>

私は次のawk文を使用しました。

awk 'BEGIN{FS = "\\n";RS = "\\n\\n"; print " "}
  { print "<candidate>" }
  { print "<name>"$1"</name>" }
  { print "<id>"$2"</id>" }
  { print "<email>"$3"</email>" }
  { print "<log>"WHAT_TO_FEED_HERE?"</log>" }
  { print "</candidate>" }
  {print " " }' Input_file1.txt Input_file2.txt> candidatefinaloutput.xml

ベストアンサー1

awkは、すべてのファイルに同じ処理を適用したくない場合は少し面倒ですが、実行できます。

このユースケースでは、最初に2番目のファイルの内容を読み、それを使用します。

BEGIN {
    while (getline <ARGV[2]) {
        logfile = logfile $0 "\n"
    }
    delete ARGV[2];
    FS = "\\n"; RS = "\\n\\n";
}
{
    print "<candidate>";
    print "<name>" $1 "</name>";
    print "<id>" $2 "</id>";
    print "<email>" $3 "</email>";
    print "<log>" logfile "</log>";
    print "</candidate>";
    print "";
}

おすすめ記事