最初の 3 つの共通列に応じてレコードを結合し、最後の列に共通しない値をコンマ区切りで配置する必要があります。次の操作を実行する必要があります。
入力ファイル :
HWF CommonDomain javatools AdminServer
ABC CommonDomain resourcebundle AdminServer
HWF CommonDomain stringeditor AdminServer
ABC CommonDomain resourcebundle HelpPortalServer_1
HWF CommonDomain stringeditor HelpPortalServer_1
HWF CommonDomain javatools HelpPortalServer_1
期待される出力:
ABC CommonDomain resourcebundle AdminServer,HelpPortalServer_1
HWF CommonDomain javatools AdminServer,IHelpPortalServer_1
HWF CommonDomain stringeditor AdminServer,HelpPortalServer_1
答え1
質問を更新していただきありがとうございます。100% 良くなりました。
「珍しい」値と呼ばれる値が出力で重複するかどうかについては言及されていませんが、そうではないと思います。
このスクリプトは のすべてのバージョンで実行できるはずですawk
。 GNU拡張機能なし、でテストしましたgawk --traditional
。より多くの条件をテストするために、入力データを追加しました。これにより、入力内の重複レコードが処理されます。私が予測する最大の問題は、入力内のカンマです。スクリプトは指定どおりに動作しますが、出力ファイルに空のフィールドなどがあるように見える可能性があります。
コードの説明:
配列recs
は、最初の 3 つのフィールドの連結によってインデックス付けされます (配列はawk
文字列によってインデックス付けされます)。配列の各要素には、カンマで区切られた「非共通」フィールドと呼ばれるものが含まれます。
すべての入力行について、key
最初の 3 つのフィールドが含まれます。for
ループは残りのフィールドを順に処理します。ステートメントif
は、このキーのフィールドがまだ保存されていないことを確認します。保存されていない場合は、フィールドがレコードの末尾に追加され、必要に応じて先頭にスペースまたはカンマが付けられます。
入力の最後 (END
タグ): キーを順に recs 配列まで進み、キーとそこに含まれるデータを出力します。
#!/bin/sh
awk '
{
key = $1 " " $2 " " $3;
for (i = 4; i <= NF; i++) {
if (recs[key] !~ "(^|,)"$i"(,|$)") {
recs[key] = recs[key] (recs[key] ? "," : "") $i
}
}
}
END {
for (key in recs) {
print key " " recs[key]
}
}
' <<EOF
HWF CommonDomain javatools AdminServer
HWF CommonDomain javatools AdminServer2
HWF CommonDomain javatools 3AdminServer
HWF CommonDomain javatools AdminServer
HWF CommonDomain javatools AdminServer
ABC CommonDomain resourcebundle AdminServer
ABC CommonDomain resourcebundle AdminServer
ABC CommonDomain resourcebundle AdminServer2
ABC CommonDomain resourcebundle 3AdminServer
HWF CommonDomain stringeditor AdminServer2
HWF CommonDomain stringeditor 3AdminServer
ABC CommonDomain resourcebundle HelpPortalServer
HWF CommonDomain stringeditor HelpPortalServer_1
HWF CommonDomain javatools HelpPortalServer_1
HWF CommonDomain javatools HelpPortalServer_2
HWF CommonDomain javatools 3_HelpPortalServer_2
HWF CommonDomain stringeditor HelpPortalServer
HWF CommonDomain javatools HelpPortalServer_1
HWF CommonDomain javatools HelpPortalServer_2
HWF CommonDomain javatools 3_HelpPortalServer
EOF
出力:
HWF CommonDomain stringeditor AdminServer,HelpPortalServer_1
HWF CommonDomain javatools AdminServer,AdminServer2,3AdminServer,HelpPortalServer_1,HelpPortalServer_2,3_HelpPortalServer_2
ABC CommonDomain resourcebundle AdminServer,HelpPortalServer_1