使用命令行工具在文件中计算行长度

问题

如果我有一个很长的文件,有很多不同长度的线条,我怎样才能计算每一行的长度?

例:

file.txt的

this is a sample file with several lines of varying length 

运行count_line_lengths file.txt会给:

 Length Occurences 1 1 2 2 4 3 5 1 6 2 7 2 

想法?

count.awk:

 { print length($0); } 

 $ awk -f count.awk input.txt | sort | uniq -c 1 1 2 2 3 4 1 5 2 6 2 7 

纯awk

 awk '{++a[length()]} END{for (i in a) print i, a[i]}' file.txt 4 3 5 1 6 2 7 2 1 1 2 2 

使用bash数组:

 #!/bin/bash while read line; do ((histogram[${#line}]++)) done < file.txt echo "Length Occurrence" for length in "${!histogram[@]}"; do printf "%-6s %s\n" "${length}" "${histogram[$length]}" done 

示例运行:

 $ ./t.sh Length Occurrence 1 1 2 2 4 3 5 1 6 2 7 2 
 $ perl -lne '$c{length($_)}++ }{ print qq($_ $c{$_}) for (keys %c);' file.txt 

产量

 6 2 1 1 4 3 7 2 2 2 5 1 

您只能使用基本的UNIX实用程序来完成此操作:

  $ printf“%s%s \ n”$(对于$(cat file.txt)中的行); printf $ line | wc -c; done | sort -n | uniq -c | sed -E“s / 0-9] +)[^ 0-9] +([0-9] +)/ \ 2 \ 1 /“)
 1 1
 2 2
 4 3
 5 1
 6 2
 7 2

怎么运行的?

  1. 这是源文件:
      $ cat file.txt
    这个
    是
    一个
    样品
    文件
    同
    一些
    线
    的
    不同
    长度
    
  2. 用它的长度replace源文件的每一行:
      $ for $( cat file.txt );  做printf $ line |  wc -c;  DONE
     4
     2
     1
     6
     4
     4
     7
    五
     2
     7
     6
    
  3. sorting并计算长度出现次数:
      $ for $(cat file.txt);  做printf $ line |  wc -c;  完成 |  sort -n |  uniq -c
           1 1
           2 2
           3 4
           1 5
           2 6
           2 7
    
  4. 交换和格式化数字:
      $ printf“%s%s \ n”$( 对于$(cat file.txt)中的行); printf $ line | wc -c; done | sort -n | uniq -c | sed -E“s / 0-9] +)[^ 0-9] +([0-9] +)/ \ 2 \ 1 /“) 
     1 1
     2 2
     4 3
     5 1
     6 2
     7 2