Awk - Mencocokkan Nilai Antara Dua File
Saya memiliki dua file yang saya coba bandingkan, dan membuat file final.txt dengan data yang ada dari kedua file tersebut.
File1 - kolom 1 dan File2 - kolom 2 berisi nilai yang harus saya cocokkan di antara kedua file tersebut.
Jadi intinya, saya mencoba -> mengambil kolom1 dari File1, jika ada kecocokan di kolom2 dari file2, lalu tulis File1Column1, File1Column2 dan File2Column1 ke file baru bernama final.txt.
CONTOH
File 1
1000,Brian
1010,Jason
400,Nick
File 2
3044 "1000"
4466 "400"
1206 "1010"
file keluaran agar terlihat seperti
1000,Brian,3044
1010,Jason,1206
400,Nick,4466
kode tes saya tidak menunjukkan hasil apa pun
awk -F"[,]" 'NR==FNR{a[$1]=$1","$2;next} ($2 in a){print a[$2]","$1}' file1.txt file2.txt
Saya percaya saya harus bisa melakukan ini dengan canggung, tetapi untuk beberapa alasan saya benar-benar berjuang dengan yang satu ini. Bantuan apa pun akan sangat dihargai.
Terima kasih
Jawaban
Bisakah Anda mencoba mengikuti, menulis dan menguji dengan sampel yang Anda tunjukkan di GNU 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
Penjelasan: Menambahkan penjelasan rinci di atas.
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.
Anda tidak menyertakan baris apa pun yang tidak cocok antara 2 file input dalam input / output sampel Anda sehingga ini mungkin atau mungkin tidak melakukan apa yang Anda inginkan untuk kasus tersebut:
$ 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