Bir perl betiğine nasıl birden fazla giriş dosyası verebilirim?


2

Dosyayı json formatına dönüştürmek için bir perl betiği kullanıyorum.
Komut dosyası şöyle:

perl -MJSON -F, -lane '
    print to_json ({
           domain => shift @F,
           emails => [map {{email =>$_}} @F]
           }, {canonical=>1})
' input1.txt' > output.json

Yapmak istediğim şudur: Komut dosyasına çoklu giriş dosyaları vermek veya giriş dosyalarını içeren eksiksiz bir klasör vermek ve tek bir çıktı almak istiyorum.
Mesela:

 perl -MJSON -F, -lane '
        print to_json ({
               domain => shift @F,
               emails => [map {{email =>$_}} @F]
               }, {canonical=>1})
    ' input1.txt','input2.txt','input3.txt' > output.json

veya

 perl -MJSON -F, -lane '
        print to_json ({
               domain => shift @F,
               emails => [map {{email =>$_}} @F]
               }, {canonical=>1})
    'path/to/inputfolder/containing/inputFiles' > output.json

Bunu nasıl yapabilirim?

Yanıtlar:


3

Bir kullanabilirsiniz fordöngü:

for file in input{1..3}.txt; do
    perl -MJSON -F, -lane '
    print to_json ({
           domain => shift @F,
           emails => [map {{email =>$_}} @F]
           }, {canonical=>1})
    ' "$file" >> output.json
done

İlk satır da olabilir

for file in /path/to/inputfolder/containing/*; do

İçindeki tüm dosyaların containingüzerinde çalışmak istediğiniz girdi dosyaları olduğunu varsayalım.

Bunun >> output.jsonyerine dosyaya eklemek için kullanmayı unutmayın >, aksi takdirde döngünün her yinelemesinde dosyanın üzerine yazılır.


Sadece küçük bir değişiklik için. Çıktıyı farklı dosyalarda istiyorsam, kodda ne değiştirebilirim? ve ayrıca süreç çok yüksek önceliğe sahip olmalıdır.
Jaffer Wilson,

farklı bir dosyaya her dosyayı yazmak için, sadece her biri için yeni bir ad vermek gerekir, bu yüzden yerini alabilecek >> output.jsonolan > $(basename "${f/.txt/.json}")(döngü çalışırken) Geçerli çalışma dizinindeki dosyaları oluşturmak ya da sadece > "${f/.txt/.json}"aynı dosya oluşturmak için giriş dosyaları olarak dizin. Bu apart değiştirilmesi aynı adla yeni bir dosya oluşturur .txtile .jsonher dosya için. Sürecin yüksek önceliğe sahip olmasını nasıl söyleyeceğimi bilmiyorum @JafferWilson
Zanna

@JafferWilson Her zamanki gibi bir zevk :)
Zanna

Zanna, sohbet odasında biraz daha sorun tartışabilir miyiz? chat.stackexchange.com/rooms/201/ask-ubuntu-general-room
Jaffer Wilson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.