shell脚本,awk实现文件a的每行数据与文件b的相对应的行的值相减,得到其绝对值。

解题思路
文件 shu 是下面这样的。
220 34 50 70
553 556 32 21
1 1 14 98 33
文件 jian是下面这样的。
10
8
2
想要得到结果是下面这样的。
210 24 40 60
545 548 24 13
1 1 12 96 31
用awk来得到想要的结果
[root@localhost study]# awk 'NR==FNR{a[NR]=$1;next}NR!=FNR{for(i=1;i<=NF;i++){$i>a[FNR]?$i=$i-a[FNR]:$i=a[FNR]-$i}}1' jian shu
210 24 40 60
545 548 24 13
1 1 12 96 31
分析上述步骤
NR==FNR 处理第一个文件 next起到跳过的作用。
a[NR]=$1
a[1]=10
a[2]=8
a[3]=2
NR!=FNR 处理第二个文件
for(i=1;i<=NF;i++) 遍历输出 1,2,3,4
$i>a[FNR]?$i=$i-a[FNR]:$i=a[FNR]-$i 这个相当于三目运算 如 3>1?a=1:a=2 这个表示的是当3大于1时,输出1,否则输出2
第二个文件先处理第一行
$1>a[1]?$1=$1-a[1]:$1=a[1]-$1 ----> 220大于10,因此执行220-10=210
$2>a[1]?$2=$2-a[1]:$2=a[1]-$2 ----> 34大于10,因此执行34-10=24
$3>a[1]?$3=$3-a[1]:$3=a[1]-$3 ----> 50大于10,因此执行50-10=40
$4>a[1]?$4=$4-a[1]:$4=a[1]-$4 ----> 70大于10,因此执行70-10=60
然后在处理第二行
$1>a[2]?$1=$1-a[2]:$1=a[2]-$1 ----> 545大于8,因此执行553-8=545
$2>a[2]?$2=$2-a[2]:$2=a[2]-$2 ----> 556大于8,因此执行556-8=548
$3>a[2]?$3=$3-a[2]:$3=a[2]-$3 ----> 32大于8,因此执行32-8=24
$4>a[2]?$4=$4-a[2]:$4=a[2]-$4 ----> 21大于8,因此执行21-8=13
最后处理第三行
$1>a[3]?$1=$1-a[3]:$1=a[3]-$1 ----> 1小于2,因此执行2-1=1
$2>a[3]?$2=$2-a[3]:$2=a[3]-$2 ----> 1小于2,因此执行2-1=1
$3>a[3]?$3=$3-a[3]:$3=a[3]-$3 ----> 14大于2,因此执行14-2=12
$4>a[3]?$4=$4-a[3]:$4=a[3]-$4 ----> 98大于2,因此执行98-2=96
$4>a[3]?$4=$4-a[3]:$4=a[3]-$4 ----> 33大于2,因此执行33-2=31
所以就输出了
210 24 40 60
545 548 24 13
1 1 12 96 31
shell脚本,awk实现文件a的每行数据与文件b的相对应的行的值相减,得到其绝对值。的更多相关文章
- Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件
本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import ...
- shell脚本 awk工具
awk工具概述awk编程语言/数据处理引擎基于模式匹配检查输入文本,逐行处理并输出通常在shell脚本中,或取指定的数据单独用时,可对文本数据做统计 命令格式格式一:awk [选项] '[条件]{编辑 ...
- shell脚本 awk实现实时监控网卡流量
一.简介 通过第3方工具获得网卡流量,这个大家一定很清楚.其实通过脚本一样可以实现效果.下面是我个人工作中整理的数据.以下是shell脚本统计网卡流量. 现原理: cat /proc/net/dev ...
- shell脚本——awk
目录 一.awk 1.1.awk简介 1.2.基本格式 1.3.工作原理 1.4.常见的内建变量(可直接用) 按字段输出文本 1.5.awk和getline 有重定向符 无重定向符 1.6.指定分隔符 ...
- 将shell脚本的执行过程和执行结果导入到log文件中
[root@localhost scripts]# vim ping.sh #!/bin/bash set -x ##分步执行 exec &> /tmp/log.txt ##脚本执行的过 ...
- php总结7——文件函数库、序列化数据、文件包含
7.1 文件函数库 php用来操作文件的 1) fopen 代开文件或URL 格式:resource fopen(string $filename, string $mode) 'r' 只读方式 ...
- shell脚本awk的基本用法
AWK 1 AWK 2 3 linux取IP地址 4 5 ifconfig | grep -w inet | sed -n '1p' | awk '{print $2}' 6 7 eg: 8 9 aw ...
- Shell脚本逐行读取文本内容并拆分,根据条件筛选文件
时间:2018-11-13 整理:byzqy 需求: 最近帮朋友写了一段脚本,他的需求是根据一份产品清单,去服务器上捞取对应产品编号的测试Log,数量大概有9000~10000条左右.文本内容大致如下 ...
- shell脚本 awk实现查看ip连接数
一.简介 处理文本,是awk的强项了. 无论性能已经速度都是让人惊叹! 二.使用 适用:centos6+ 语言:英文 注意:无 awk 'BEGIN{ while("netstat -an& ...
随机推荐
- HDU2222【AC自动机(基础·模板)】
Frist AC zi dong ji(Aho-Corasick Automation) of life #include <bits/stdc++.h> using namespace ...
- lightoj1010【LCS】
题意: 求最长公共子序列,并且这个子序列是字典序最小. 思路: LCS附一个值,dp[i][j].first代表以i,j的LCS的长度,dp[i][j].second代表LCS结尾元素,然后利用路径输 ...
- 怎么解决UIScrollView把uitableviewcell的点击事件屏蔽了
[self.contentView addSubview:self.scrollView]; self.scrollView.userInteractionEnabled = NO; [self.co ...
- 设置导航栏 self.navigationItem.titleView 居中
喜欢交朋友的加:微信号 dwjluck2013-(void)viewDidLayoutSubviews{ [self setDisplayCustomTitleText:@"每日头条&quo ...
- C# 面向对象之封装
封装是指将类的内部数据隐藏起来不让对象实例直接对其操作,C#中提供了属性机制来对类内部的状态进行操作. 在C#中封装可以通过public.private.protected和internal等关键字来 ...
- POP页面暂时不销毁
摘要:我们经常使用的QQ空间,当我们短时间内两次进入页面的时候,页面是没有重新创建的,不光是缓存的数据,是整个页面都没有变.我们在开发中可能也会有这样的需求.开始的时候,想的思路是这样的:用定时器,将 ...
- Java内置锁和简单用法
一.简单的锁知识 关于内置锁 Java具有通过synchronized关键字实现的内置锁,内置锁获得锁和释放锁是隐式的,进入synchronized修饰的代码就获得锁,走出相应的代码就释放锁. jav ...
- IBatis.net特性展示代码
最近公司计划设计新业务平台架构.数据访问层框架要使用ibatis.net.头让我做些例子给其他同事演示下 ibatis的基本特性.然后评估下看是否使用.本来以后上官方下载NPetshop演示下就行了那 ...
- 抽象常量class
需要把经常用到的常量抽象到一个类里面管理 如:
- 忘记Centos7.2下root用户密码后的处理方式
1)重启系统 重新启动系统后并按f2键,进入如下的界面,再按e键. 2)修改启动内核代码 在代码的linux16行中,将ro rhgb的ro修改为rw init=/sysroot/bin/sh. 3) ...