Bir şablon başlığını mevcut birden çok dosyaya kopyalama


0

Üstbilgileri kullanan bir sürü * .csv dosyasına sahibim. Şu anda dosyaların başlıkları ve aynı sayıda veri satırları var. Bu dosyalardaki verileri silmem gerekiyor, bu yüzden üstbilgiyi dosyaların üzerine yazabileceğimi düşündüm. ABaşlık ile düzgün ayarlanmış bir dosya var . cat ADiğer tüm csv dosyalarına nasıl girebilirim ?

Alternatif olarak, son X sayısını satırdan nasıl silebilirim? Dosyaların yolu*/*.csv

Yanıtlar:


1
  1. Dosyaların her birinin başlığını yakalayın. ABahsettiğinizden beri bunun bir dosya olduğunu farz ediyorum cat. Eğer öyleyse, sadece kopyalayabilirsiniz:

    for file in */*.csv; do cp A "$file"; done
    

    Eğer Abir değişkendir, do

    for file in */*.csv; do echo "A" > "$file"; done
    

    Alternatif olarak, ihtiyacınız olan tek şey ilk satırsa, bunu her dosyaya ekleyebilirsiniz. Bu şekilde, farklı başlıklar için de işe yarayacaktır:

    for file in */*.csv; do head -n "$file" > /tmp/foo && 
      mv /tmp/foo "$file"; 
    done
    
  2. Dosyalardan son X sayısını silmek için birçok yol vardır . İşte üç:

    • head, X’i, saklamak istediğiniz birçok satırla değiştirin:

      for file in */*.csv; do
        head -n X $file > /tmp/foo && mv /tmp/foo "$file"; 
      done
      
    • awk, 123tutmak istediğiniz ancak istediğiniz sayıda satırı değiştirin :

      for file in */*.csv; do
        awk 'NR<=123' "$file" > /tmp/foo && mv /tmp/foo "$file"; 
      done
      
    • perl, 123tutmak istediğiniz ancak istediğiniz sayıda satırı değiştirin :

      for file in */*.csv; do
        perl -ne "next if $.>123;print' "$file" > /tmp/foo && 
        mv /tmp/foo "$file"; 
      done
      

Bunun en kolay kullanımı bulundu Son X satırları silmek için sednereye <N>silmek ve istediğiniz ilk satırı $son satırı belirtmek için kullanılır: sed -i '<N>,$d'. Örneğin, sonuna kadar 2 satırından silmek: sed -i '2,$d'.
Stuart

1

Bir dosya listesini (veya herhangi bir şeyi) bir komut listesine dönüştürmek için sed ve bazı yönlendirme yaratıcılıklarını kullanabilirsiniz.

Bu bir test, sadece neler olacağını görmeniz için komutları verir:

$ ls *.cvs | sed "s/.*/cat headerfile.cvs > &/"

İsterseniz, aynısını yapın ve favori kabuğunuza aktarın:

$ ls *.cvs | sed "s/.*/cat headerfile.cvs > &/" | bash

Veya özyinelemeli bir çözüm bulmak için kullanabilirsiniz:

find . -name \*.cvs | sed "s/.*/cat headerfile.cvs > &/" | bash
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.