我必須合并兩個檔案并需要幫助:
檔案 1.csv
mac-test-2,10.57.8.2,Compliant
mac-test-6,10.57.8.6,Compliant
mac-test-12,10.57.8.12,Compliant
mac-test-17,10.57.8.17,Noncompliant
檔案2.csv
mac-test-17,10.57.8.17,2022-10-21
合并后的內容應該是 Merge.csv
mac-test-2,10.57.8.2,Compliant,NA
mac-test-6,10.57.8.6,Compliant,NA
mac-test-12,10.57.8.12,Compliant,NA
mac-test-17,10.57.8.17,Noncompliant,2022-10-21
所以邏輯是如果 File1.txt 在 File2.txt 中沒有匹配的記錄,則應插入“NA”,如果匹配,則應在第四列中插入日期。
我在下面寫了
awk -F "," '
ARGV[1] == FILENAME{a[$1];next}
{
if ($1 in a) {
print $0 ","
} else {
print $0 ",NA"
}
}
' File2.csv File1.csv
但這是列印
mac-test-2,10.57.8.2,Compliant,NA
mac-test-6,10.57.8.6,Compliant,NA
mac-test-12,10.57.8.12,Compliant,NA
mac-test-17,10.57.8.17,Noncompliant,
如果日期匹配,我不確定如何列印日期。
uj5u.com熱心網友回復:
使用您顯示的示例,請嘗試以下awk代碼。僅使用您展示的樣本進行撰寫和測驗。
awk '
BEGIN{ FS=OFS="," }
FNR==NR{
arr[$1]=$NF
next
}
{
print $0,($1 in arr?arr[$1]:"NA")
}
' file2.csv file1.csv
要處理空的 file2.csv,請嘗試以下awk程式。
awk '
BEGIN{ FS=OFS="," }
ARGV[1] == FILENAME{
arr[$1]=$NF
next
}
{
if ($1 in arr) {
print $0,arr[$1]
}
else{
print $0,"N/A"
}
}' file2.csv file1.csv
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/512820.html
標籤:linux壳awk
