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