次のようなCSVファイルがあります。
abd,123,egypt,78
cde,456,england,453列目の単語のみの文字数を取得するにはどうすればよいですか?
wcこれを行う方法がわかりません。
次のようなCSVファイルがあります。
abd,123,egypt,78
cde,456,england,453列目の単語のみの文字数を取得するにはどうすればよいですか?
wcこれを行う方法がわかりません。
回答:
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)
wcすることができなかったためwc、このコンテキストでの使用方法を示す理由であると解釈します。
                    awk -F, '{sum+=length($3)}; END {print +sum}' fileawk列ベースのファイルを1行ずつ処理するために設計されました。この問題はツールに最適です。
                    0入力ファイルが空の場合、空行の代わりに印刷します。
                    awk典型的なUnixの精神で3つの基本的なユーティリティ(それぞれがの数分の1のサイズ)をケースに協力させる(同時に動作する)ことで、タスクを達成できます。cut + tr + wcが、このawk自体の5倍の速さであることに気付くかもしれませんperl。(少なくとも私のシステムでは、UTF8ロケールで、100MBのファイルで試しました)。
                    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-Mopen=:localeためperl、文字が何であるかのユーザー/システムの定義を使用し、それ以外の場合は、文字がバイトであると仮定し、。a,1,españa,2UTF-8ロケール(ほとんどのシステムのデフォルト)で入力を試してください。
                    サンプルファイルは次のようになります。
$ 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
7wc各行のカウントを取得するために作業するのは難しい場合があります。列3の各文字列に対して個別に呼び出す必要があるため、必要な処理を行うのが少し難しくなります。CSVの各行を調べて、列3を抽出し、それを提示してwc文字数を取得する必要があります。
とを使用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
72つの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
wcコマンドを使用して出力を取得できない!」と述べています。