ARGC 命令行参数个数ARGV 命令行参数排列_awk能比较两个文件中每行中的数值">
赞
踩
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符
awk统计命令
1、求和
cat data|awk '{sum+=$1} END {print "Sum = ", sum}'
2、求平均
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'
3、求最大值
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'
4、求最小值(min的初始值设置一个超大数即可)
cat data|awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'
逐行比较两个文件的内容
[root@DevelopServer ~]# cat 1.txt|wc -l > data
[root@DevelopServer ~]# cat 2.txt|wc -l >> data
[root@DevelopServer ~]# cat data
10
11
[root@DevelopServer ~]# cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'
Max= 11
[root@DevelopServer ~]#
[root@DevelopServer ~]#
[root@DevelopServer ~]# line=`cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print max}'`
[root@DevelopServer ~]# echo $line
11
[root@DevelopServer ~]#
for ((i=1;i<=$line;i++))
do
pfile1_lint=`awk 'NR=='"$i"'{print $0}' 1.txt`
pfile2_lint=`awk 'NR=='"$i"'{print $0}' 2.txt`
echo "i=$i $pfile1_lint $pfile2_lint"
if [ "$pfile1_lint" != "$pfile2_lint" ]; then
echo "i=$i $pfile1_lint $pfile2_lint no equal."
else
echo "i=$i $pfile1_lint $pfile2_lint equal."
fi
done
输出结果
[root@DevelopServer ~]#
[root@DevelopServer ~]# for ((i=1;i<=$line;i++)); do pfile1_lint=`awk 'NR=='"$i"'{print $0}' 1.txt`; pfile2_lint=`awk 'NR=='"$i"'{print $0}' 2.txt`; echo "i=$i $pfile1_lint $pfile2_lint"; if [ "$pfile1_lint" != "$pfile2_lint" ]; then echo "i=$i $pfile1_lint $pfile2_lint no equal." ; else echo "i=$i $pfile1_lint $pfile2_lint equal."; fi; done
i=1 1a 1a
i=1 1a 1a equal.
i=2 2b 2bb
i=2 2b 2bb no equal.
i=3 3c 3c
i=3 3c 3c equal.
i=4 4d 4dd
i=4 4d 4dd no equal.
i=5 5e 5ee
i=5 5e 5ee no equal.
i=6 6f 6ff
i=6 6f 6ff no equal.
i=7 7g 7g
i=7 7g 7g equal.
i=8 8h 8hh
i=8 8h 8hh no equal.
i=9 9i 9i
i=9 9i 9i equal.
i=10 10j 10jj
i=10 10j 10jj no equal.
i=11 11i
i=11 11i no equal.
[root@DevelopServer ~]#

#awk 逐行取数据 for循环
[root@DevelopServer ~]# line=`cat 1.txt|wc -l`
[root@DevelopServer ~]# echo $line
10
[root@DevelopServer ~]# for ((i=1;i<=$line;i++));do pp=`awk 'NR=='"$i"'{print $0}' 1.txt`; echo "i=$i $pp"; done
i=1 1a
i=2 2b
i=3 3c
i=4 4d
i=5 5e
i=6 6f
i=7 7g
i=8 8h
i=9 9i
i=10 10j
[root@DevelopServer ~]#
[root@DevelopServer ~]#
#awk 逐行取数据 next
[root@DevelopServer ~]# awk 'NR==1{next}{print NR,$0;}' 1.txt
2 2b
3 3c
4 4d
5 5e
6 6f
7 7g
8 8h
9 9i
10 10j
[root@DevelopServer ~]#
#awk 逐行取数据 指定行
[root@DevelopServer ~]# awk 'NR==1{print NR,$0;}' 1.txt
1 1a
[root@DevelopServer ~]#
#awk 逐行取数据 指定行 奇数行
[root@DevelopServer ~]# awk 'NR%2==1{print NR,$0;}' 1.txt
1 1a
3 3c
5 5e
7 7g
9 9i
#awk 逐行取数据 指定行 偶数行
[root@DevelopServer ~]# awk 'NR%2==0{print NR,$0;}' 1.txt
2 2b
4 4d
6 6f
8 8h
10 10j
[root@DevelopServer ~]#

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。