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 wc
melakukan 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 wc
melakukan ini.
Jawaban:
cut -d, -f3 | tr -d '\n' | wc -m
(ingat yang wc -c
menghitung 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
)
wc
memberi saya jumlah karakter yang mengapa saya menunjukkan cara menggunakan wc
dalam konteks ini.
awk -F, '{sum+=length($3)}; END {print +sum}' file
awk
dirancang untuk memproses file berbasis kolom, baris demi baris. Masalahnya sangat cocok untuk alat ini.
0
bukan 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 perl
satu. (setidaknya pada sistem saya, di lokal UTF8, mencoba pada file 100MB).
Sebuah perl
solusi:
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=:locale
untuk perl
menggunakan user / definisi sistem apa karakter adalah, jika tidak mengasumsikan karakter byte. Coba pada a,1,españa,2
input 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 wc
untuk 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 wc
untuk mendapatkan jumlah karakter.
Menggunakan sed
danawk
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
wc
perintah untuk mendapatkan hasil!'