Bir csv dosyasının bir sütunu nasıl çıkarılır
Bir csv dosyam varsa, yalnızca tek bir sütunun içeriğini yazdırmanın hızlı bir bash yolu var mı? Her satırın aynı sayıda sütuna sahip olduğunu varsaymak güvenlidir, ancak her sütun'un içeriği farklı uzunlukta olacaktır.
95
3
Bunun için awk kullanabilirsiniz. İstediğiniz n'inci sütuna '$2' değiştirin.
Evet. 'cat mycsv.csv | cut -d ',' -f3' 3. sütunu yazdıracaktır.
Diğer cevaplar işe yarıyor, ancak sadece bash kabuğunu kullanarak bir çözüm istediğiniz için bunu yapabilirsiniz:
Ve sonra sütunları (bu örnekte ilk sütun) şu şekilde çekebilirsiniz:
Yani burada birkaç şey oluyor:
while IFS=,
- bu, kabuğun alanları (metin bloklarını) ayırmak için kullandığı IFS (Dahili Alan Ayırıcı) olarak virgül kullanılmasını söyler. Yani IFS=, demek "a,b" demek gibidir, IFS=" " olsaydı "a b" ile aynı olurdu (varsayılan olarak budur.)read -a csv_line;
- bu, her satırı teker teker okumayı ve her öğenin "csv_line" olarak adlandırıldığı bir dizi oluşturmayı ve bunu while döngümüzün "do" bölümüne göndermeyi söylerdo echo "${csv_line[0]}";done < file
- şimdi "do" aşamasındayız ve "csv_line" dizisinin 0. elemanına echo diyoruz. Bu işlem dosyanın her satırında tekrarlanır. "< file" kısmı sadece while döngüsüne nereden okuyacağını söyler. NOT: unutmayın, bash'te diziler 0 indekslidir, yani ilk sütun 0. elemandır.İşte kabukta CSV'den bir sütun çekmek. Diğer çözümler muhtemelen daha pratiktir, ancak bu saf bash.