shell

一. 循环

for i in xx1 xx2 xx3

do

    echo $i

    ssh $i "cat file | grep xx | awk '{print\$1,\$2}' > ddd"

done;


命令中若含有管道或者重定向运算符,不使用 "" 则只能执行管道或者重定向之前的命令。此外,引号中的 $ 需要转义。


二. 文件合并

现有file1,file2 两个文件。文件file1有2列,内容如:

no1 name1

no2 name2

no3 name2

no4 name3

no5 name4

no6 name4

no7 name4

no8 name5

no9 name6

no10 name6

文件file2 有6列,部分有空格,内容如下:

name1 data1 dada2 data3 data4 dada5

name2 dada6 data7 dada8

name3 data9 dada10 data11 dada12

name4 data13 dada14

name5 data15 dada16

name6 data17 data18

如果file1的第2列跟file2的第1列匹配,则将两条数据合并成一条,合并后的数据应该是这样的:

no1 name1 data1 dada2 data3 data4 dada5

no2 name2 dada6 data7 dada8

no3 name2 dada6 data7 dada8

no4 name3 data9 dada10 data11 dada12

no5 name4 data13 dada14

no6 name4 data13 dada14

no7 name4

no8 name5 data15 dada16

no9 name6 data17 data18

no10 name6 data17 data18

程序:awk 'NR==FNR{a[$1]=$0}NR>FNR{print $1" "a[$2]}' file2 file1


NR - Number of Record - 当前处理的行是第几行(因为 awk 是流处理工具,一行一行处理的,所以 NR 在不停的自增 1)
FNR - File Number of Record - 当前处理的行是当前处理文件的第几行
NF - Number of Fileds - 当前行有多少列数据(这个在每行都会根据设定的分割符重新计算,默认分割符是任务长个空白符)

(NR==FNR) 大致等效于 (ARGIND==1) , 前者就是说当前处理的总行数跟文件内行数相等,而这种情况一般来说都是在第一个文件上,而 ARGIND==1 是参数位置第 1 的文件时生效。<也有可能前面的文件是空的,那么 NR==FNR 就生效于第一个非空文件,这就是跟 ARGIND==1 的明显区别>


三. 

awk 'BEGIN {total=0} {total=total+$1;} END {print total}'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值