Car*_* Yi -1 string bash awk grep
我有一个看起来像这样的文件:
dog
cat
dog
dog
fish
cat
Run Code Online (Sandbox Code Playgroud)
我想在 Bash 中编写某种代码来使文件格式化为:
dog:1
cat:1
dog:2
dog:3
fish:1
cat:2
Run Code Online (Sandbox Code Playgroud)
关于如何做到这一点的任何想法?该文件非常大(> 30K 行),所以代码应该有点快。
我在想某种循环......
像这样:
while read line;
echo "$line" >> temp.txt
val=$(grep $line temp.txt)
echo "$val" >> temp2.txt
done < file.txt
Run Code Online (Sandbox Code Playgroud)
进而 paste -d ':' file1.txt temp2.txt
但是,我担心这会很慢,因为您要逐行进行。其他人怎么看?
您可以使用这个简单的awk方法为您完成这项工作:
awk '{print $0 ":" ++freq[$0]}' file
Run Code Online (Sandbox Code Playgroud)
dog:1
cat:1
dog:2
dog:3
fish:1
cat:2
Run Code Online (Sandbox Code Playgroud)