Cat (UNIX) komutunu bir klasördeki tüm dosyalara ayrı ayrı nasıl uygulayabilirim?


2

İşte durum:

A.csv dosyamın, klasördeki diğer tüm * .csv'ler ile ayrı ayrı birleştirilmesi ve çıktıların her birinin belirli * .csv ile aynı ada sahip olması gerekir.

Bunu terminalde nasıl yapabilirim? Bunu 50 kez yapmak zorundayım ve diğer csv'lerde sıralı adlandırma kuralı yok, bu yüzden elle yazmak acı verici.

Veriler duyarlıdır; cat A.csv * csv & gt; *. csv çalışır. (Sanırım olmaz)


2
Bilginize > Terminal çıkışı ile dosyanın üzerine yazacaktır. >> Terminal çıkışını dosyaya ekler.
justbrowsing

Yanıtlar:


3

İçin bir for döngüsü kullanın. bash. Önce kendinize zararsız bir test yapabilirsiniz:

#!/bin/bash
for f in *.csv; do
    if [ "$f" != 'A.csv' ]; then
        echo cat A.csv "$f" \> "$f.new"
    fi
done

Bu, neyin yürütüleceğini görmenize izin verir ancak gerçekte yürütülmez.

Çıktı dosyasını aradığımı fark et. $f.new. Bunu garanti edemezsin cat Kabuk dosyanın üzerine yazmaya başlamadan önce gerçekleştirilir. Bu yüzden, bunu yapmanızı veya daha iyi bir dosyayı başka bir dizine yazmanızı öneririm:

mkdir combined
for f in *.csv; do
    if [ "$f" != 'A.csv' ]; then
        echo cat A.csv $f \> "combined/$f"
    fi
done

Ve elbette, mutlu olduğunuzda, yankıyı (ve kaçanları) kaldırın > karakter):

cat A.csv "$f" > "combined/$f"

1
Boşlukları düzgün bir şekilde işlemek istiyorsanız tek yapmanız gereken değişkenlerinizi ikiye katlamaktır, bu kadar basit :)
slhck
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.