Awk - İki Dosya Arasındaki Değerleri Eşleştir

Dec 28 2020

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

2 RavinderSingh13 Dec 28 2020 at 00:58

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.
EdMorton Dec 28 2020 at 05:09

Ö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