特定列中的字符数(长度)

Character count (length) within specific column

是否有一种单行方法来获取制表符分隔的 .txt 文件的特定列中保存的字符串的字符长度,然后将这些计数附加到最后一列(列数可能是可变的)?

示例数据:

1   AA
2   BBB
3   CCCCC
4   EE
5   DDD
6   AAA
7   FFFFF
8   AA
9   BBB
10  NNN

为了获得计数,我尝试使用:

perl -lane 'print length $F[2]' in > out

perl -F, -Mopen=:locale -lane 'print length $F[2]' in > out

然而,结果是空的。

我也试过:

perl -lane '$_.=$F[2]; print length $_'

但是,正如我现在意识到的那样,它打印了整行而不是特定列的字符数。

我不确定我将如何附加最后一列。

期望输出(计算第 2 列时):

1   AA      2   
2   BBB     3
3   CCCCC   5
4   EE      2
5   DDD     3
6   AAA     3
7   FFFFF   5
8   AA      2
9   BBB     3
10  NNN     3

看来你们很亲近。 Perl 数组索引从零开始,那么使用 $F[1] 的长度怎么样?您还需要某种分隔符

perl -lape '$_ .= "\t". length($F[1])' input

输出

1   AA  2
2   BBB 3
3   CCCCC       5
4   EE  2
5   DDD 3
6   AAA 3
7   FFFFF       5
8   AA  2
9   BBB 3
10  NNN 3

如果您想要输出完全,那么您需要像这样使用printf

perl -lane 'printf qq{%-4d%-8s%d\n}, @F, length($F[1])' input

输出

1   AA      2
2   BBB     3
3   CCCCC   5
4   EE      2
5   DDD     3
6   AAA     3
7   FFFFF   5
8   AA      2
9   BBB     3
10  NNN     3