Pet*_*ton 61 bash shell scripting command-line
如果我有一个包含许多不同长度行的长文件,我如何计算每个行长度的出现次数?
file.txt的
this
is
a
sample
file
with
several
lines
of
varying
length
Run Code Online (Sandbox Code Playgroud)
跑步count_line_lengths file.txt会给:
Length Occurences
1 1
2 2
4 3
5 1
6 2
7 2
Run Code Online (Sandbox Code Playgroud)
想法?
Ign*_*ams 90
count.awk:
{
print length($0);
}
Run Code Online (Sandbox Code Playgroud)
...
$ awk -f count.awk input.txt | sort | uniq -c
1 1
2 2
3 4
1 5
2 6
2 7
Run Code Online (Sandbox Code Playgroud)
iru*_*var 24
纯粹的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
Run Code Online (Sandbox Code Playgroud)
Adr*_*rth 10
使用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
Run Code Online (Sandbox Code Playgroud)
示例运行:
$ ./t.sh
Length Occurrence
1 1
2 2
4 3
5 1
6 2
7 2
Run Code Online (Sandbox Code Playgroud)
$ perl -lne '$c{length($_)}++ }{ print qq($_ $c{$_}) for (keys %c);' file.txt
Run Code Online (Sandbox Code Playgroud)
6 2
1 1
4 3
7 2
2 2
5 1
Run Code Online (Sandbox Code Playgroud)