deneyin:
awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1
Çıktı: Yukarıdaki kod
111 000 444
222 111 555
333 555 666
Açıklama:
FNR==NR
bütün Bir defada tüm bir dosya ile çalışmanızı sağlar. Bu durumda, f2
dosyadır. NR
ve FNR
her ikisi de FNR
arasındaki farkla birlikte satır numaralarını içerir, NR
'un artmaya devam ettiği yeni bir dosya okunduğunda 1'e sıfırlanır. Biz f2
dosya ile çalışırken
- biz değeri olarak
key
ve üçüncü kolonuna ($3
) olarak hat numarası (NR
) kullanılarak a
olarak adlandırılan bir dizi oluşturma edilir. next
, eylem bloğunun kalanını atlamamıza izin veriyor.
- Bir kez
f2
dosya biter bitmez, f1
dosya üzerinde çalışmaya başlarız. NR==FNR
durumu FNR
1 ve NR
artmayacak kadar yanlış olmaz. Yani sadece ikinci eylem bloğu {$2=a[FNR]}
üzerinde çalışılacak.
- Bu bloğun yaptığı, satır numarasına bakarak ikinci sütun değerini dizi değerine yeniden atamasıdır. Sonunda,
1
satırını yazdırır. Doğru döner ve awk
gerçek ifadeleri, satırın yazdırılmasıyla sonuçlanır.
f2 f1
, tanımlı dosyaların sırasıdır. f2
dosyasından bir dizi oluşturmak istediğimizden önce bunu koyarız.
Komutu açıklar mısınız? Teşekkür – saloua
@saloua Biraz açıklama ekledim. Umarım yardımcı olur! –
Kullanım durumum çok az farklı (sadece biraz). Fark, ayrılmış alan yerine f1 ve f2 için virgülle ayrılmış bir dosyam oldu. Aynı komutu "-F" seçeneği ile denedim, ancak çıktı dosyası bu durumda virgül içermiyordu. Bunu düzeltmenin herhangi bir yolu var mı? – Ganesh