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 wcyapacağı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 wcyapacağımı bulamıyorum.
Yanıtlar:
cut -d, -f3 | tr -d '\n' | wc -m
( wc -ckarakterleri 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 wcbu bağlamda nasıl kullanılacağını gösterdim.
awk -F, '{sum+=length($3)}; END {print +sum}' file
awksütun tabanlı dosyaları satır satır işlemek için tasarlanmıştır. Sorun araca mükemmel şekilde uyar.
0girdi dosyası boş olduğunda boş satır yerine yazdırmak içindir .
awktipik 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=:localeiçin perlbir karakter ne olduğu kullanıcı / sistemin tanımını kullanmak aksi takdirde karakterler bayt varsayar. a,1,españa,2UTF-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 wcher 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 wckarakter sayısını elde etmek için sunmanız gerekir.
kullanılması sedveawk
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 !'