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*