使用命令行工具在文件中计算行长度
问题
如果我有一个很长的文件,有很多不同长度的线条,我怎样才能计算每一行的长度?
例:
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
怎么运行的?
- 这是源文件:
$ cat file.txt 这个 是 一个 样品 文件 同 一些 线 的 不同 长度
- 用它的长度replace源文件的每一行:
$ for $( cat file.txt ); 做printf $ line | wc -c; DONE 4 2 1 6 4 4 7 五 2 7 6
- 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
- 交换和格式化数字:
$ 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