LeetCode Shell
前言
实验环境
- 英文题面
- Git 2.26.0 for Windows
195. Tenth Line
分类:Shell
难度:简单
1 | awk '{if(NR==10) print $0}' file.txt |
考虑不足 10 行的情况,输出最后一行
1 | awk '{if(NR==10) print $0} END{if(NR<10) print $0}' file.txt |
193. Valid Phone Numbers
分类:Shell
难度:简单
1 | awk '/^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$/' file.txt |
192. Word Frequency
分类:Shell
难度:中等
1 | cat words.txt | tr -s ' ' '\n' | awk '{words[$1]++;} END{for(k in words){print k,words[k];}}' | sort -nrk2 |
其他解法,这两行命令的区别在于分割单词,从执行时间的反馈来看使用 xargs
更慢一些。
1 | cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -nr | awk '{print $2,$1}' |
194. Transpose File
分类:Shell
难度:中等
用 awk
把数据读入为二维数组然后再转置输出,这种方法的时空效率都比较低。
1 | awk '{for(i=1;i<=NF;i++){words[NR][i]=$i}} END{for(i=1;i<=NF;i++){for(j=1;j<=NR;j++){if(j==1){printf words[j][i]}else{printf " "words[j][i]}}printf "\n"}}' file.txt |
用一维数组将每一列数据存为一项,每次输出一列数据(即转置后的一行)。
1 | awk '{for(i=1;i<=NF;i++){if(NR==1){words[i]=$i}else{words[i]=words[i]" "$i}}} END{for(i=1;i<=NF;i++){print words[i]}}' file.txt |
print
:输出并换行printf
:输出不换行
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Jckling's Blog!
评论