マージは列の2つのファイルによって異なります。列1からn番目に表示される文字列は、列1file1
からn番目に表示される同じ文字列とマージする必要がありますfile2
。参加しようとしましたが、期待どおりではありませんでした。
join <(sort file1) <(sort file2)| column -t | tac | sort | uniq > file3
ファイル1
CAAX-MC oracle.log.ApplicationScript 1 7 CRM
CAAZ-TEST-MC oracle.log.ApplicationScript 1 7 CRM
DAA oracle.log.ApplicationScript 1 7 CRM
DJF oracle.log.ApplicationScript 1 6 CRM
DJF oracle.apps.appslogger 5 6 CRM
ファイル2
CAAX-MC CRMDomain
CAAZ-TEST-MC CRMDomain
DJF CRMDomain
DJF CommonDomain,CRMDomain,FinancialDomain
ファイル3- 希望の出力:
CAAX-MC oracle.log.ApplicationScript 1 7 CRM CRMDomain
CAAZ-TEST-MC oracle.log.ApplicationScript 1 7 CRM CRMDomain
DAA oracle.log.ApplicationScript 1 7 CRM
DJF oracle.log.ApplicationScript 1 6 CRM CRMDomain
DJF oracle.apps.appslogger 5 6 CRMCommonDomain,CRMDomain,FinancialDomain
答え1
使用awk
:
awk 'FNR==NR{a[NR-1]=$0}
FNR!=NR{for(i in a){split(a[i],x," ");
if(x[1]==$1){$0=$0" "x[2];delete a[i];break}}print;}' file2 file1
パラメータの順序に注意してください:file2
はい今後 file1
。
FNR==NR
:最初のファイル(パラメータリスト)にのみ適用されますfile2
。a[NR-1]=$0
a
:配列を行で埋めますfile2
。
FNR!=NR
:に適用されますfile1
。for(i in a)
:以前に作成した配列を繰り返します。a
split(a[i],x," ")
:空白の値(の行)を分割してfile2
という新しい配列に保存しますx
。if(x[1]==$1)
x
:()の最初の要素がx[1]
最初のフィールドと同じ場合(最初のフィールドが配列に見つかった場合)$1
。file1
$0=$0" "x[2]
新しい値を印刷する行の末尾を設定しますx[2]
。delete a[i];break
そのインデックスが再び表示されるようにしたいのでfile1
(たとえばDJF
)、配列内の対応する要素を削除しa
てforループ(break
)を終了する必要があります。print
:要素が配列にあるかどうかは重要ではなく、file1
とにかく(of)行を印刷する必要があります。
出力:
CAAX-MC oracle.log.ApplicationScript 1 7 CRM CRMDomain
CAAZ-TEST-MC oracle.log.ApplicationScript 1 7 CRM CRMDomain
DAA oracle.log.ApplicationScript 1 7 CRM
DJF oracle.log.ApplicationScript 1 6 CRM CRMDomain
DJF oracle.apps.appslogger 5 6 CRM CommonDomain,CRMDomain,FinancialDomain
答え2
試す前にファイルを注文した場合アッ
awk '
{
a=$1 #store key field in var a
b=$2 #store second field in var b
do {
getline <"test" #get line from test file
if(l) #if var l is not empty
l=l"\n"$0 #add line to var l separated by newline
else
l=$0 #otherways(var l is empty) put line into var l
}
while(a!=$1) #repeats above while key fields will be equal
print l,b #prints stored lines + b part of first file
l="" #empty line store variable
}' common_test.log
出力:
CAAX-MC oracle.log.ApplicationScript 1 7 CRM CRMDomain
CAAZ-TEST-MC oracle.log.ApplicationScript 1 7 CRM CRMDomain
DAA oracle.log.ApplicationScript 1 7 CRM
DJF oracle.log.ApplicationScript 1 6 CRM CRMDomain
DJF oracle.apps.appslogger 5 6 CRM CommonDomain,CRMDomain,FinancialDomain