Awk - İki Dosya Arasındaki Değerleri Eşleştir
Karşılaştırmaya çalıştığım iki dosyam var ve bu dosyaların her ikisinden de var olan verilerle bir final.txt dosyası oluşturuyorum.
Dosya1 - sütun 1 ve Dosya2 - sütun 2, iki dosya arasında eşleştirmem gereken değeri içerir.
Bu nedenle, esasen -> Dosya1'den sütun1'i almaya çalışıyorum, eğer dosya2'nin 2. sütununda bir eşleşme varsa, File1Column1, File1Column2 ve File2Column1'i final.txt adlı yeni bir dosyaya yaz.
MİSAL
Dosya 1
1000,Brian
1010,Jason
400,Nick
Dosya 2
3044 "1000"
4466 "400"
1206 "1010"
görünecek çıktı dosyası
1000,Brian,3044
1010,Jason,1206
400,Nick,4466
test kodum herhangi bir sonuç göstermiyor
awk -F"[,]" 'NR==FNR{a[$1]=$1","$2;next} ($2 in a){print a[$2]","$1}' file1.txt file2.txt
Bunu awk ile yapabilmem gerektiğine inanıyorum, ama nedense bununla gerçekten mücadele ediyorum. Herhangi bir yardım çok takdir edilecektir.
Teşekkürler
Yanıtlar
Eğer, aşağıdaki GNU içinde gösterilen örnekleri ile yazılı ve test deneyin misiniz awk
.
awk '
FNR==NR{
gsub(/"/,"",$2) arr[$2]=$1 next } FNR==1{ FS="," OFS="," $0=$0 } ($1 in arr){
print $0,arr[$1]
}
' Input_file2 Input_file1
Açıklama: Yukarıdakiler için ayrıntılı açıklama ekleniyor.
awk ' ##Starting awk program from here.
FNR==NR{ ##Checking condition FNR==NR which will be TRUE when Input_file1 is being read.
gsub(/"/,"",$2) ##globally substituting " in 2nd field with NULL. arr[$2]=$1 ##Creating array arr with index of 2nd field and value of 1st field. next ##next will skip all further statements from here. } FNR==1{ ##Checking condition if this is first line of Input_file1. FS="," ##Setting FS as comma here. OFS="," ##Setting OFS as comma here. $0=$0 ##Reassigning current line to itself so that field separator values will be implemented to current line. } ($1 in arr){ ##Checking condition if 1st field is present in arr then do following.
print $0,arr[$1] ##Printing current line and value of array arr.
}
' file2 file1 ##Mentioning Input_file names here.
Örnek giriş / çıkışınızdaki 2 giriş dosyası arasında eşleşmeyen herhangi bir satır eklemediniz, bu nedenle bu, bu durumlarda istediğinizi yapabilir veya yapmayabilir:
$ cat tst.awk BEGIN { FS="[[:space:]\",]+"; OFS="," } NR==FNR { map[$2] = $1 next } { print $0, map[$1] }
$ awk -f tst.awk file2 file1
1000,Brian,3044
1010,Jason,1206
400,Nick,4466