Ben OP düzenlemek ve girdi_dosya (lar) içine işlemi kaydetmek zorunda (SO kendisi üzerinde) bir soru rastladım.
Aşağıdakileri yapabileceğimiz tek bir Input_file için biliyorum:
awk '{print "test here..new line for saving.."}' Input_file > temp && mv temp Input_file
Şimdi, aynı tür dosya biçimlerinde değişiklik yapmamız gerektiğini varsayalım (burada .txt olduğunu varsayalım).
Ne denedim / bu sorun için düşündüm: Onun yaklaşımı .txt dosyaları bir for döngüsü geçiyor ve tek çağırmakawkacı verici ve tavsiye DEĞİL bir işlemdir, çünkü gereksiz CPU döngüleri israf edecek ve daha fazla sayıda dosya için daha fazla olurdu yavaş.
Burada, awkyerinde seçeneği desteklemeyen bir NON GNU ile birden çok dosya için yerinde düzenleme yapmak için burada ne yapılabilir . Ben de bu iş parçacığından geçtim Değişiklikleri awk ile kaydedin ama GNON awkolmayan bir awk inplaceseçeneğine sahip olmayacağından GNON awk yardımcısı ve kendi içinde birden fazla dosyayı değiştirmek için pek bir şey yok .
Not: nedenbashetiketekliyorum, benim yanıt bölümünde, geçici dosyaları gerçek Input_file adlarını yeniden eklemek için bash komutları kullandım, böylece ekleyerek.
DÜZENLEME: Ed sir'in yorumuna göre, burada örneklerin bir örneğini ekleyerek, bu iş parçacığının kodunun amacı, genel amaçlı yerinde düzenlemede de kullanılabilir.
Örnek Girdi_dosyaları:
cat test1.txt
onetwo three
tets testtest
cat test2.txt
onetwo three
tets testtest
cat test3.txt
onetwo three
tets testtest
Beklenen çıktı örneği:
cat test1.txt
1
2
cat test2.txt
1
2
cat test3.txt
1
2
awk(belki bir alt kabukta) veya {...}kapalı bir grubu kullanmıyorsunuz ve sonuçları istenen çıktı dosyasına (her girdi dosyası için, veya tüm girdi dosyaları için birleştirilmiş bir dosya). Sonra alt kabuk veya küme ayracı kapalı grubun çıktısını yazılmakta olan geçerli dosyaya yönlendiriyor musunuz? Sadece awkkomutu takip giriş dosyaları bir dize dahil sırayla tüm dosyaları (veya benzer bir şey) işleyecek ??
awk {..} file1 .. fileX, değiştirilmiş dosyayı şöyle yazarak 2 seçenek (1) görüyorum temp01ve bir sonraki dosyayı işlerken sonraki yinelemede mv -f tmp01 input01, değiştirilen verilerle giriş dosyasının üzerine yazmak için a kullanın; veya (2) komut dosyasının ./tmp/tmp01 ... ./tmp/tmp0Xyürütülmesi sırasında yeni bir dizin yazmanız ve dizindeki awkdosyalar üzerinde bir döngü ile izlemeniz ./tmpve örn. mv -f "$i" "input_${i##*[^0-9]}"(veya eski giriş dosyalarını değiştirmeniz için hangi genişleme yapmanız gerekiyorsa)
awktam kod tamamlanmadan bir şey yapıyoruz , 2. seçenek önerimde kullandığımın hemen hemen aynı olacak, Bu çözüm hakkında düşüncelerinizi bildirirseniz minnettar olun efendim.