leetcode中shell题解

常见的shell

awk用法

# grades.txt 如下:

Alice 85
Bob 92
Charlie 78
Alice 90
Bob 88


# awk程序
{
   
    name = $1
    score = $2
    sum[name] += score
    count[name]++
}

END {
   
    for (name in sum) {
   
        avg = sum[name] / count[name]
        printf "学生 %s 的平均分是 %.2f\n", name, avg
    }
}


# 运行awk程序
awk -f calculate_avg.awk grades.txt

统计词频

写bash统计word.txt中每一个单词出现的频率

  • 连续的字符进行压缩 -s = sequeeze
echo "Helloooooo, world!!!" | tr -s 'o'
# 变成
Hello world

# 将连续的空格转换成单个换行符
tr -s ' ' '\n'

# 结果
the
day
is
sunny
the

  • 单词排序

sort

  • 统计词频

uniq -c

-c:在每列旁边显示该行重复出现的次数

wc -w统计词频但是不显示原来的单词

  • 排序单词出现的次数

sort -r

-r逆序

  • 打印

awk '{print $2, $1}':这里加上逗号

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

有效电话号码

^:表示开头位置
$:表示结尾位置
^\([0-9]{
   3}\) [0-9]{
   3}-[0-9]{
   4} 


# xxx-xxx-xxxx
^[0-9]{
   3}-[0-9]{
   3}-[0-9]{
   4}

# 最终表达式
^([0-9]{
   3}-|\([0-9]{
   3}\) )[0-9]{
   3}-[0-9]{
   4}$
grep -P 正则表达式 file.txt
awk '/pattern/' file.txt
gawk
功能扩展:gawk提供了一些增强功能,如更强大的正则表达式支持、更丰富的内置函数、更强大的模式处理能力以及更灵活的输出控制。

正则表达式:gawk支持更丰富的正则表达式语法,包括零宽断言、非贪婪匹配、捕获组等。相比之下,传统的awk实现可能对一些高级正则表达式功能的支持较弱。

内置函数:gawk提供了一些额外的内置函数,如gensub()、strftime()等,用于字符串处理、日期时间操作等。

数组排序:gawk提供了asort()和asorti()函数,可以对数组进行排序。

多维数组:gawk支持多维数组,可以创建和操作更复杂的数据结构。

编程功能:gawk支持一些编程特性,如BEGIN和END模式、自定义函数等,使得编写复杂的awk脚本更加方便。

转置文件

  • wc -w 计算多个单词。类似uniq -c

  • xargs:多行变成一行

# 注意这里使用了三个引号包裹$i变量
awk '{print $'''$i'''}' | args



# 统计有多少列
c=${cat file.txt | head -1 | wc -w}
# 每一列进行转置
for i in $(seq 1 $c)
do
	awk '{print $'''$i'''} | args'
done

因此,print $'''$i'''的含义是打印第i列的值。

请注意,这里使用了三个单引号'''来包围$i,这是因为在某些情况下,如果直接使用$i,Shell会将其解析为Shell变量,而不是传递给awk命令。使用三个单引号可以防止Shell解析变量。

另外不要忘了使用cat读取文件

第十行

  • tail -n +10 :从第10行还是显示
  • sed -n '10p' file.txt
  • awk {NR == 10} file.txt:行计数器等于10的行

sed -n 's/Hello/Hi/p' file.txt:将文件中的Hello替换成Hi

常见的多线程笔试题

常用的JUC工具包

  • semaphore。生产者消费者模型中最常用的一个。交替问题
  • futureTask: 搜索、线程池,任务思维
  • CountDonwLatch
  • lock
  • synchornized
  • volatile

常用的并发工具包

  • concurrentHashMap:搜索问题
  • BlockingList

单例模式

  • 私有构造器
  • 静态获取方法
  • 锁本类。
package LeetReview;

/**
 * @author: Zekun Fu
 * @date: 2023/8/6 16:19
 * @Description:
 *
 * 1. 静态内部类: 直接使用静态内部类holder
 * 2. 懒汉式: 先判断是否有无,如果没有在new一个
 * 3.饿汉式: 直接new 一个
 * 4. 双锁检测
 */
public class Siglonten {
   

    private static volatile Siglonten instance;            // 为了防止使用未初始化的对象,这里加上volatile关键字,保证可见性
    private Siglonten() {
   
        System.out.println("创建单例!");
    }
    private static Siglonten getSiglote() {
   
        if (instance == null) {
                                // 第一次防止不必要的加锁
            synchronized (Siglonten.class) {
                  // 确保只有一个实例被创建
                if (instance == null) {
   
                    instance = new Siglonten();
                }
            }
        }
        return instance;
    }

    public static void main(String[] args) {
   
        for (int i = 0; i < 10; i++) {
   
            new Thread(()->{
   
                Siglonten siglonten = Siglonten.getSiglote();
            }).start();
        }
    }

}

相关推荐

  1. leetcodeshell题解

    2024-01-01 11:48:02       62 阅读
  2. leetcodesql题目分类与总结

    2024-01-01 11:48:02       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-01 11:48:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-01 11:48:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-01 11:48:02       87 阅读
  4. Python语言-面向对象

    2024-01-01 11:48:02       96 阅读

热门阅读

  1. Spring Boot Actuator 功能介绍

    2024-01-01 11:48:02       48 阅读
  2. Redis 和 memcache 有什么区别?

    2024-01-01 11:48:02       59 阅读
  3. IDEA中查找实现类快捷键

    2024-01-01 11:48:02       61 阅读
  4. web自动化(3)——项目实战之流程用例编写

    2024-01-01 11:48:02       50 阅读
  5. 多浏览器密码修改,账户Token全部失效解决方案

    2024-01-01 11:48:02       84 阅读
  6. spingboot整合Swagger教程

    2024-01-01 11:48:02       61 阅读
  7. c++11--常量表达式

    2024-01-01 11:48:02       60 阅读