如何获取特定列中单词的字符数?

use*_*123 13 shell csv columns wc

我有一个像这样的 CSV 文件:

abd,123,egypt,78
cde,456,england,45
Run Code Online (Sandbox Code Playgroud)

如何获得仅第 3 列单词的字符数?

我不知道如何wc做到这一点。

Hau*_*ing 23

awk -F, '{sum+=length($3)}; END {print +sum}' file
Run Code Online (Sandbox Code Playgroud)

  • 阿门;`awk` 设计用于逐行处理基于列的文件。该问题非常适合该工具。 (3认同)
  • @spuder,即当输入文件为空时打印“0”而不是空行。 (3认同)
  • @Ray,另一方面,可以通过让 3 个基本实用程序(每个实用程序都是 awk 大小的一小部分)以典型的 Unix 精神与案例合作(同时工作)来完成任务。您可能会注意到 cut+tr+wc 是 5 种类型,它的速度是 awk 本身的 5 倍,是 perl 的 5 倍。(至少在我的系统上,在 UTF8 语言环境中,尝试了 100MB 的文件)。 (3认同)

Sté*_*las 23

cut -d, -f3 | tr -d '\n' | wc -m
Run Code Online (Sandbox Code Playgroud)

(请记住,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
Run Code Online (Sandbox Code Playgroud)

)

  • @mikeserv,我将其解释为 _I 无法让 `wc` 为我提供字符数_,这就是我展示如何在这种情况下使用 `wc` 的原因。 (3认同)

cuo*_*glm 5

一个perl解决方案:

perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file
Run Code Online (Sandbox Code Playgroud)

或更短的版本:

perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
Run Code Online (Sandbox Code Playgroud)


Jos*_* R. 3

在 Perl 中:

perl -F, -Mopen=:locale -lane 'print length $F[2]' your_file
Run Code Online (Sandbox Code Playgroud)