常用shell脚本(牛客题库)

1.统计文件行数

#!/bin/bash
##方法一
wc -l ./code.txt | awk '{print $1}'

##方法二
awk '{print NR}' ./code.txt | tail -n 1

##方法三
awk 'ENG{print NR}' ./code.txt

##方法四
grep -c "" ./code.txt
##或者
grep -n "" ./code.txt | awk -F ":" "{print $1}"

##方法五
sed -n '$=' ./code.txt

2.打印文件的最后5行

#!/bin/bash
tail -n 5 ./code.txt
tail -5 ./code.txt

##查看文件前5行
head -5 ./code.txt

##查看文件中间几行
sed -n '5,10p' ./code.txt

3.输出0到500中7的倍数

##方法一:正解
#!bin/bash
num=0
while (( $num<=500 ))
do
if (( $num%7==0 ))
then
    echo $num
fi
    let "num++"
done


##方法二:逆解,效率最高
#!bin/bash
num=0
while (( $num<=500 ))
do
    echo $num
     let "num+=7"
done

##方法一其他写法
#!/bin/bash
for num in {0..500..7}; do  
  echo "${num}" 
done


#!/bin/bash
for num in {0..500};do
   [[ "((num%7))" -eq 0 ]] && echo "${num}"
done
exit 0

4.输出第5行的内容

##方法一
head -n 5 nowcoder.txt | tail -n 1 

##方法二
sed -n 5p ./code.txt

5.打印空行的行号

##方法一,正则部分也可用'^$'
grep -n '^\s*$' ./nowcoder.txt | awk -F ":" '{print$1}'

##方法二
awk '/^\s*$/{print NR}' nowcoder.txt

##方法三
sed -n '/^\s*$/=' ./code.txt

6.去掉文件中空行

##方法一:awk指令
awk '{if($0 != ""){print $0}}' ./code.txt

##方法二
cat ./code.txt | awk NF

##方法三
grep -v '^$' ./code.txt
grep -e '\S' ./code.txt

##方法四
cat ./code.txt | tr -s "\n"

##方法五
set '/^\s*$/d' ./code.txt

7.打印字母数小于8的单词

tr ",." " " < ./nowcoder.txt | awk -F " " '{for(i=1;i<=NF;i++){if(length($i)<8){print $i}}}'

8.统计所有进程占用内存大小和

##查看所有进程信息,这样第6列显示的是内存大小
ps -aux | grep -v "RSS"

##方法一
#!bin/bash
sum=0
    for i in `awk '{print $6}' nowcoder.txt`
    do
        ((sum+=$i))
        done
    echo $sum  

##方法二
#!bin/bash
sum=0
while read p
    do
        ((sum+=$(echo $p|awk '{print $6}')));        
    done < nowcoder.txt
echo $sum

##方法三
awk '{sum+=$6}END{print sum}' nowcoder.txt
awk 'BEGIN{sum=0}{sum+=$6}END{print sum}' nowcoder.txt

##方法四 性能最佳
sum=0;
while read p
do
    arr=($p)
    ((sum+=arr[5]))
done <nowcoder.txt
echo $sum

9.统计每个单词出现的个数

##方法一
cat nowcoder.txt |tr -s ' ' '\n'|sort|uniq -c|sort|awk '{print $2,$1}'

##方法二
awk '{for(i=1;i<=NF;i++) a[$i]+=1}END{for(x in a) print x,a[x]}' nowcoder.txt

10.第二列是否有重复

##给定一个文件,有三列,统计第二列是否有重复,有几个重复,并提取重复信息

##方法一
cat code.txt | awk '{print $2}' | sort | uniq -c | grep -v "1" | sort

##方法二
awk '{a[$2]++}END{for(i in a) print a[i],i}' nowcoder.txt |awk '{if($1 > 1) print $0}'

11.转置文件内容(列变行)

awk '{
    for(i=1;i<=NF;i++){
      if(NR==1){
        row[i] = $i;
      }else{
        row[i] = row[i]" "$i;
      }
    }
}END{
  for(i=1;i<=NF;i++){
    print row[i]
  }
}
' ./nowcoder.txt

12.大sql文件第一行加"set autocommit='0'",每隔10000行加commit

#!/bin/bash
sed -i "1i set autocommit = '0';" $1
NUM=0
cat $1 | awk 'NR%2==0{print NR}' | while read line
do
        sed -i ''$[$line+$NUM]'a commit;' $1
        NUM=$[$NUM+1]
        echo $NUM
done
echo 'commit;' >> $1

13.大文件拆成多个小文件,前后加set autocommit=0和commit

split -l 2 info.txt newinfo.txt

sed -i "1i set autocommit = '0';" b.txt*

sed -i '$a commit;' b.txt*
posted @   微醺的小布  阅读(145)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示

目录导航