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.