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& ...
随机推荐
- 笔记-JavaWeb学习之旅10
Servlet server applet运行在服务器端的小程序,servlet就是一个接口,定义了Java类被浏览器访问到的规则(Java类重写这个接口,就可以被浏览器(tomcat)识别) Ser ...
- JQuery Easyui/TopJUI 多表头创建
JQuery Easyui/TopJUI 多表头创建 废话不多说,直接贴上代码. html <div data-toggle="topjui-layout" data-opt ...
- st表求区间最大值
Input 第一行给出一个数字N,接下来N+1行,每行给出一个数字Ai,(0<=i<=N<=1E6)接来给出一个数字Q(Q<=7000),代表有Q个询问每组询问格式为a,b即询 ...
- STP-1-802.1D生成树协议及改进
第一个 IEEE 标准化的STP也常称为“ 传统”STP,最初在802. 1D中进行了描述. 之后得到了改进,发布在所谓的修正案中:快速 STP( RSTP),在修正案802. 1w 中描述了它的标准 ...
- 在SpringBoot中用SpringAOP实现日志记录功能
背景: 我需要在一个SpringBoot的项目中的每个controller加入一个日志记录,记录关于请求的一些信息. 代码类似于: logger.info(request.getRequestUrl( ...
- 098 Validate Binary Search Tree 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树.一个二叉搜索树有如下定义: 左子树只包含小于当前节点的数. 右子树只包含大于当前节点的数. 所有子树自身必须也是二叉搜索树.示例 1 ...
- Redis基础理论
一.概述 二.数据类型 STRING LIST SET HASH ZSET 三.数据结构 字典 跳跃表 四.使用场景 计数器 缓存 查找表 消息队列 会话缓存 分布式锁实现 其它 五.Redis 与 ...
- 在spring的过滤器中注入实体类(@autowire会失效可使用这个方法)
转载:难得可贵的好文章 https://blog.csdn.net/chl191623691/article/details/78657638 首先,本文 绝对是好文!不止本文,作者的文章都是很经 ...
- 2840 WIKIOI——评测
2840 WIKIOI——评测 时间限制: 1 s 空间限制: 2000 KB 题目等级 : 白银 Silver 题目描述 Description Wikioi上有一题有N个测试点,时限为 ...
- git clone fatal: unable to access 'https://github.com/carlon/demo.git/': Failed to connect to github.com port 443: Timed out
$ git config --global http.proxy $ git config --global --unset http.proxy 虽然之前没有设置代理,但是不知道为什么执行以上代码之 ...