Ben böyle bir CSV dosyası var:
abd,123,egypt,78
cde,456,england,45
Yalnızca 3. sütun kelimelerinin karakter sayısını nasıl alabilirim?
Bunu nasıl wc
yapacağımı bulamıyorum.
Ben böyle bir CSV dosyası var:
abd,123,egypt,78
cde,456,england,45
Yalnızca 3. sütun kelimelerinin karakter sayısını nasıl alabilirim?
Bunu nasıl wc
yapacağımı bulamıyorum.
Yanıtlar:
cut -d, -f3 | tr -d '\n' | wc -m
( wc -c
karakterleri değil, bayt sayıldığını unutmayın :
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -c
7
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -m
6
)
wc
yorumladığım, bu yüzden wc
bu bağlamda nasıl kullanılacağını gösterdim.
awk -F, '{sum+=length($3)}; END {print +sum}' file
awk
sütun tabanlı dosyaları satır satır işlemek için tasarlanmıştır. Sorun araca mükemmel şekilde uyar.
0
girdi dosyası boş olduğunda boş satır yerine yazdırmak içindir .
awk
tipik Unix ruhu içinde (aynı anda çalışan) dava ile işbirliği yapan 3 temel yardımcı programın (her biri büyüklüğünün bir kısmıdır) elde edilerek gerçekleştirilebilir . Cut + tr + wc'nin 5 tipinin ne kadar hızlı olduğunu fark edebilirsiniz, bu awk'ın kendisi 5 kat daha hızlıdır perl
. (en azından sistemimde, UTF8 yerel ayarında, 100 MB'lık bir dosyada denedim).
Bir perl
çözüm:
perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file
veya daha kısa bir sürüm:
perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
-Mopen=:locale
için perl
bir karakter ne olduğu kullanıcı / sistemin tanımını kullanmak aksi takdirde karakterler bayt varsayar. a,1,españa,2
UTF-8 yerel ayarında bir giriş yapmayı deneyin (çoğu sistemde varsayılan).
Örnek dosyanızla:
$ cat sample.txt
abd,123,egypt,78
cde,456,england,45
$ awk -F, '{print $3}' sample.txt | while read i; do echo "$i" | \
tr -d '\n' | wc -m; done
5
7
Çalışma wc
her hat sayısını elde etmek zor olabilir. Sütun 3'ten her dize için ayrı ayrı çağırmanız gerekir, bu da istediğinizi yapmak için biraz zorlaşır. CSV'nizin her satırına bakmanız, 3. sütunu çıkarmanız ve ardından wc
karakter sayısını elde etmek için sunmanız gerekir.
kullanılması sed
veawk
sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'
Misal:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/g' | awk -v FS="" '{print NF;}'
5
7
İki awk
awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'
Misal:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
wc
Çıktı almak için komut kullanamıyorum !'