Shell-Script

根據常見列合併記錄,並將最後一列中不常見的值指定為逗號分隔

  • November 4, 2015

我需要根據前三個常見列合併記錄,並將最後一列中不常見的值以逗號分隔。我需要執行以下操作-

輸入文件 :

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

引用自:https://unix.stackexchange.com/questions/240462