问题
如果我有一个包含许多不同长度行的长文件,我如何计算每行长度的出现次数?
例子:
文件.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
想法?
如果我有一个包含许多不同长度行的长文件,我如何计算每行长度的出现次数?
文件.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
想法?
这个
awk
,然后sort -n
使用and finally对(数字)行长度进行排序uniq -c
。$ awk '{print length}' input.txt | sort -n | 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
试试这个: awk '{print length}' 如果你想要最长的长度,或者下一个: awk '{ln=length} ln>max{max=ln} END {print FILENAME " " max}' 你可以将上面的命令与 find使用 -exec 选项。
您可以通过仅使用基本的 unix 实用程序来完成此操作:
$ printf "%s %s\n" $(for line in $(cat file.txt); do 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
$猫文件.txt 这个 是 一个 样本 文件 和 一些 线条 的 变化的 长度
$ for line in $( cat file.txt ); 做 printf $line | 厕所-c; 完毕 4 2 1 6 4 4 7 5 2 7 6
$ for line in $(cat file.txt); 做 printf $line | 厕所-c; 完成| 排序-n | 唯一的-c 1 1 2 2 3 4 1 5 2 6 2 7
$ printf "%s %s\n" $( for line in $(cat file.txt); do 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