leetcode 刷题(shell部分)
Contents
192. Word Frequency
题目描述
统计文件中各个单词出现的次数
解题思路
只想到awk(awk几乎可以做任何事情…)1
awk '{for(i=1; i<=NF; i++) r[$i] ++;}END{for (key in r){print key " " r[key];}}' words.txt | sort -k2nr
另外,看到这篇博客里的另一种思路1
cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn | awk '{print $2" "$1}'
193. Valid Phone Numbers
题目描述
验证文件中每行是否是一个合法的电话号码
解题思路
很简单,用正则规则先验证即可1
egrep '^(\([0-9]{3}\)\ [0-9]{3}|[0-9]{3}-[0-9]{3})-[0-9]{4}$' file.txt
194. Transpose File
题目描述
相当于文件的转置
解题思路
思路很简单,主要是看对于常用工具的使用1
awk '{for(i=1; i<=NF; i++) {r[i] = r[i] " " $i;}} END{ for(i=1; i<=NF; i++) print substr(r[i], 2)}' file.txt'>)}>)}'
195. Tenth Line
题目描述
打印文件的第10行内容
解题思路
第一次提交的时候没有注意如果文本行数没有10行的时候不输出,想了好久都没有想出来,最后还是参考别人的解法,发现还是对Linux下的工具用的太少,好多功能不知道。解法有1
2
3
4
5
6# awk
awk 'NR == 10' file.txt
# sed
sed -n '10p' file.txt
# tail + head
tail -n+10 file.txt | head -n 1
作者: pfchai
链接: http://blog.pfchai.com/2016/05/leetcode-刷题(shell部分)/
本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可