web-dev-qa-db-ja.com

特定の列の単語の文字数を取得するにはどうすればよいですか?

次のようなCSVファイルがあります。

abd,123,egypt,78
cde,456,england,45

3列目の単語のみの文字数を取得するにはどうすればよいですか?

wcでこれを行う方法を理解できません。

12
user3116123
cut -d, -f3 | tr -d '\n' | wc -m

wc -c文字ではなくバイトをカウントします:

$ 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

23
awk -F, '{sum+=length($3)}; END {print +sum}' file
22
Hauke Laging

Perlソリューション:

Perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file

またはより短いバージョン:

Perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
5
cuonglm

Perlの場合:

Perl -F, -Mopen=:locale -lane 'print length $F[2]' your_file
3
Joseph R.
cut -d, -f3 <<\DATA | grep -o . | grep -c .
abd,123,egypt,78
cde,456,england,45
DATA

#OUTPUT
12
3
mikeserv

あなたも使うことができます

awk -F, '{printf "%s", $3}' file | wc -m
3
terdon

次のようなサンプルファイルを使用します。

$ 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

wcを使用して各行のカウントを取得するのは難しい場合があります。列3の文字列ごとに個別に呼び出す必要があるため、必要な操作を行うのが少し難しくなります。 CSVの各行を調べ、列3を抽出し、wcに提示して文字数を取得する必要があります。

1
slm

sedおよびawkの使用

sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'

例:

$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/g' | awk -v FS="" '{print NF;}'
5
7

2つのawk

awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'

例:

$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
0
Avinash Raj