leetcode 刷题(shell部分)

-
-
2016-05-05

192. Word Frequency

题目连接:Word Frequency

题目描述

统计文件中各个单词出现的次数

解题思路

只想到awk(awk几乎可以做任何事情...)

awk '{for(i=1; i<=NF; i++) r[$i] ++;}END{for (key in r){print key " " r[key];}}' words.txt | sort -k2nr

另外,看到这篇博客里的另一种思路

cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn | awk '{print $2" "$1}'

193. Valid Phone Numbers

题目连接:Valid Phone Numbers

题目描述

验证文件中每行是否是一个合法的电话号码

解题思路

很简单,用正则规则先验证即可

egrep '^(\([0-9]{3}\)\ [0-9]{3}|[0-9]{3}-[0-9]{3})-[0-9]{4}$' file.txt

194. Transpose File

题目连接:Transpose File

题目描述

相当于文件的转置

解题思路

思路很简单,主要是看对于常用工具的使用

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

题目连接:Tenth Line

题目描述

打印文件的第10行内容

解题思路

第一次提交的时候没有注意如果文本行数没有10行的时候不输出,想了好久都没有想出来,最后还是参考别人的解法,发现还是对Linux下的工具用的太少,好多功能不知道。解法有

# awk
awk 'NR == 10' file.txt
# sed
sed -n '10p' file.txt
# tail + head
tail -n+10 file.txt | head -n 1

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录