shell之seq,grep,awk,uniq等命令及正则表达式汇总

1.多行数据汇总为一行

1.txt  |awk -v ORS='","'    '1'
xargs < 1.txt
 cat .txt |xargs                        //方法一、通过xargs命令完成
a=(cat 1.txt);echoa                  //方法二、整个文件读入一个变量,然后直接打印
 sed -n '1h;1!H;${g;s/\n/ /g;p;}' 1.txt  //方法三、使用sed把文件读入保持空间,到最后一行时,替换换行符为空格符
 paste -d " " -s < 1.txt
 cat 1.txt | paste -d " " -s  

2.按行切分

split [-bl] file [prefix]
按行切分
split -l  200  1.txt
按大小切分
 -b, --bytes=SIZE:对file进行切分,每个小文件大小为SIZE。可以指定单位b,k,m。
split -b 600k  1.txt

3.awk if 用法



awk '{if (1==1) print "A"; else if (1==2) print "B"; else print "C"}'

4.awk 同时匹配多个分割符

awk -F "[: , ]" 

5.awk 求最大值,最小值,求和,求平均值

求最大值:awk 'BEGIN {max = 0} {if (1+0>max+0) max=1} END {print "", max}'
求最小值:awk 'BEGIN {min = 65536} {if (1+01} END {print "Min=", min}'
求和:awk '{sum+=1} END {print "Sum= ", sum}'
求平均值:awk '{sum+=1} END {print "Avg= ", sum/NR}'

6.awk 统计数字的分布区间

比如,
输入:
a 1
b 21
c 13
d 24
e 15
f 16
g 27
h 9
i 31
j 65
j 35
k 55

这些数字中,小于10的出现2次,10-20出现了3次,20-40出现了5次,大于40出现了2次。
如何按这个范围统计呢?

输出:
<10 2
10-20 3
20-40 5
>40 2

awk 'BEGIN{split("<10 10-20 20-40 >40",b)}{if(2<10)a[1]++;else if(2<20)a[2]++;else if($2<40)a[3]++;else a[4]++}END{for(i in a)print b[i],a[i]}'

7 同时两个变量循环执行while

file1
file2
while read -r -u 4 line1 && read -r -u 5 line2
 do
   echo line1
   echoline2
   echo "---------------------------------------------------------------------"
done 4<file1 5<file2
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: