所有人。
我有一个文件,文件名的格式为:
Name Name Surname Surname
这是具有名称的文件
Nikola KAZIKOVA
Pavel MILAN GAZDIK
Nikolas Martin STRUP
Nikola GAZDIK
Nikola ČERNÁ
Nikola Martina ČERNÁ
我正在尝试创建一个脚本,在每个名字旁边打印出现的次数。但是我不知道如何计算它们。
这是我的代码,我可以将文本加载到数组中,但我不知道如何计算名称。
#!/bin/bash
file=$1
if [[ -z $1 ]]
then echo "ERROR: FILE NOT FOUND"
exit
fi
# Read the file in parameter and fill the array named "array"
getArray() {
array=() # Create array
while IFS= read -r line # Read a line
do
array+=("$line") # Append line to the array
done < "$1"
}
# Print the file (print each element of the array)
getArray $file
for e in "${array[@]}"
do
IFS=' ' read -ra arr <<< "$e"
echo "${arr[0]}" | grep -o "${arr[0]}"
done
这是我想达到的结果
[4] Nikola KAZIKOVA
[1] Pavel MILAN GAZDIK
[1] Nikolas Martin STRUP
[4] Nikola GAZDIK
[4] Nikola ČERNÁ
[4] Nikola Martina ČERNÁ
3条答案
按热度按时间e37o9pze1#
一个选项:
输出:
注意,由于
grep
在循环中,这不是非常有效。如果你的文件很大,那么你可能需要使用替代工具,如.awk
或python
。awk
替代品;输出:
ctzwtxfj2#
用你显示的样本,请尝试下面的
awk
代码。***说明:***添加上述代码的详细说明。
r1zhe5dt3#
这可能对你有用(GNU sed,sort,uniq):
删除每行中除名字以外的所有内容。
把名字排序。
使用
uniq
计算每个名称出现的次数。将上面的结果转换为一个sed脚本,该脚本以
[n]
为每个名称加上其计数前缀。将上面的sed脚本应用于原始文件。