awk逐行比较两个文件的内容

31 篇文章 0 订阅


awk内置变量

awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

复制代码
ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符
复制代码

 此外,$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。


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 ~]#



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-无-为-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值