Post

LeetCode Shell复盘

难度-Easy

LeetCode Shell复盘

LeetCode题目练习

尝试一下LeetCode的shell题目,正常普通一共四道题,我做了一下感觉不如群主出的题目有意思不过练习一下还行,我的方式很普通所以你有好的点子或者你的方法优雅可以联系我,我很愿意接受知识,哈哈哈

题目一

picture 0

这里我一看直接head加tail即可,但是这个题目埋了一个位置是不满足10算最后一个所以我将方法直接使用为sed,同样awk也是可以完成的

1
2
sed -n '10p' file.txt||sed -n '$p' file.txt
awk 'NR==10{print;exit}END{if(!NR)print}' file.txt

题目二

picture 1

这个我一开始就使用了grep的笨方法但是我记得可以进行统一部分不动异或动形式但是没通过

1
2
3
grep -E '^([0-9]{3}-[0-9]{3}-[0-9]{4}|\([0-9]{3}\) [0-9]{3}-[0-9]{4})$' file.txt
grep -P '^([0-9]{3}-|\([0-9]{3}\) )?[0-9]{3}-[0-9]{4}$' file.txt
awk '/^[0-9]{3}-[0-9]{3}-[0-9]{4}$|^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$/' file.txt

题目三

picture 2

这个我真没啥思路,看了gtp思路是awk加for,当然我觉得不优雅而且肯定有更好方案,不过我不会,希望有大佬提供方案

1
2
3
4
5
6
7
awk '{
    for(i=1; i<=NF; i++){
        a[i] = (a[i] ? a[i] " " $i : $i)
    }
} END {
    for(i=1; i<=NF; i++) print a[i]
}' file.txt

题目四

picture 3

这个的话先进行换行操作,让数据一行一个,然后去除空行,接着awk进行操作,sort -k2 nr进行按第二列降序,不过我觉得还有更好的方案,目前没想到希望有大佬给我来点操作

1
cat words.txt| tr ' ' '\n' | sed '/^$/d' | awk '{word[$1]++} END {for (i in word) print i, word[i]}' | sort -k2 -nr

由于leetcode就四道shell题,所以这个文章到这里结束了

This post is licensed under CC BY 4.0 by the author.