我需要根據前三個常見列合併記錄,並將不常見的值放置在最後一列中,以逗號分隔。我有要求執行以下操作-
輸入檔 :
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
感謝您更新問題,百分百好轉。
您沒有提到您所謂的“不常見”值中的值是否應該在輸出中重複,我認為不會。
該腳本應該在所有版本的awk
. 沒有 GNU 擴展,測試用gawk --traditional
.我添加了額外的輸入資料來測試更多條件。這處理輸入中的重複記錄。我預見的最大問題是輸入中的逗號,腳本將按指定工作,但輸出檔案可能看起來有空字段等。
代碼說明:
此recs
數組透過前三個字段的串聯來索引。 (中的陣列awk
由字串索引。)陣列的每個元素都包含您所說的用逗號分隔的「不常見」欄位。
對於每個輸入行:key
包含前三個欄位。循環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