Shell-Script
根據常見列合併記錄,並將最後一列中不常見的值指定為逗號分隔
我需要根據前三個常見列合併記錄,並將最後一列中不常見的值以逗號分隔。我需要執行以下操作-
輸入文件 :
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
感謝您更新問題,100%更好。
你沒有提到你所謂的“不常見”值中的值是否應該在輸出中重複,我認為不是。
該腳本應在所有版本的
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