Saya memiliki file CSV seperti ini:
abd,123,egypt,78
cde,456,england,45
Bagaimana saya bisa mendapatkan jumlah karakter hanya kata-kata kolom 3?
Saya tidak tahu bagaimana cara wcmelakukan ini.
Saya memiliki file CSV seperti ini:
abd,123,egypt,78
cde,456,england,45
Bagaimana saya bisa mendapatkan jumlah karakter hanya kata-kata kolom 3?
Saya tidak tahu bagaimana cara wcmelakukan ini.
Jawaban:
cut -d, -f3 | tr -d '\n' | wc -m
(ingat yang wc -cmenghitung byte, bukan karakter:
$ 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
)
wcmemberi saya jumlah karakter yang mengapa saya menunjukkan cara menggunakan wcdalam konteks ini.
awk -F, '{sum+=length($3)}; END {print +sum}' file
awkdirancang untuk memproses file berbasis kolom, baris demi baris. Masalahnya sangat cocok untuk alat ini.
0bukan baris kosong ketika file input kosong.
awk) bekerja sama dengan case (bekerja secara bersamaan) dalam semangat Unix yang khas. Anda mungkin memperhatikan bahwa cut + tr + wc one adalah 5 jenis secepat yang ini awk sendiri 5 kali lebih cepat dari yang perlsatu. (setidaknya pada sistem saya, di lokal UTF8, mencoba pada file 100MB).
Sebuah perlsolusi:
perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file
atau versi yang lebih pendek:
perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
-Mopen=:localeuntuk perlmenggunakan user / definisi sistem apa karakter adalah, jika tidak mengasumsikan karakter byte. Coba pada a,1,españa,2input di lokal UTF-8 (default pada kebanyakan sistem).
Dengan file sampel Anda seperti ini:
$ 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
Bekerja dengan wcuntuk mendapatkan hitungan setiap baris bisa rumit. Anda harus memanggilnya untuk setiap string dari kolom 3 secara individual yang membuatnya agak sulit untuk melakukan apa yang Anda inginkan. Anda harus melihat melalui setiap baris CSV Anda, ekstrak kolom 3 dan kemudian sajikan wcuntuk mendapatkan jumlah karakter.
Menggunakan seddanawk
sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'
Contoh:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/g' | awk -v FS="" '{print NF;}'
5
7
Dua awk
awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'
Contoh:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
wcperintah untuk mendapatkan hasil!'