×

awk如何合并一个文件的列

awk如何合并一个文件的列(awk 分隔)

admin admin 发表于2023-04-06 19:19:07 浏览69 评论0

抢沙发发表评论

本文目录一览:

awk 多文件合并,多列索引等操作

例 1  索引

a.txt 文件内容如下:

b.txt文件如下

执行命令:

awk 'NR==FNR{a[$1]=$2}NR!=FNR{if($1 in a) print $1, a[$1], $2; else print $1, 0, $2}' a.txt b.txt

输出结果:

参数解释:

awk 'NR==FNR{a[$1]=$2}NR!=FNR{if($1 in a) print $1, a[$1], $2; else print $1, 0, $2}' a.txt b.txt

NR==FNR{a[$1]=$2}  : NR==FNR判断是否是第一个文件,如果是第一个文件执行 {a[$1]=$2 } 操作,将a.txt第一列作为key 第二列作为value生成索引a。 这一步执行后得出的结果大概是 a={'20000401':'100000999', '20100503':'100000888'} (实际上并不是json结构)-awk如何合并一个文件的列

NR!=FNR{if($1 in a) print $1, a[$1], $2; else print $1, 0, $2} : 如果不是第一个文件, 这个例子中是指b.txt, 这段命令中 $1, $2 都是b.txt 中的第一、二列,逻辑很简单不解释了。-awk如何合并一个文件的列

例 2. 统计

awk '{if (($3 = 10 ) ($3 20)) _cnt_10+=1; else _cnt_20+=1} END {print _cnt_10, _cnt_20}' res.txt -awk如何合并一个文件的列

awk '{if (($3 = 10 ) ($3 20)) {_cnt_10+=1} else if($3=0 $310) {_cnt_1+=1} else {_cnt_20+=1}} END {print _cnt_1,_cnt_10, _cnt_20}' res.txt-awk如何合并一个文件的列

结果:

上面两个范围统计的例子原理不难, 主要是语法难记, 需要注意的是我的mac笔记本里不能用elif 报语法错误, 只能用else if 不知道怎么回事。

linux怎么把多列数据合成一列

使用awk先把每列都输出为一个文件,然后cat把所有文件合并为一个文件就可以了

cat 1.txt |awk ‘{print$1}‘ a

cat 1.txt |awk ‘{print$2}‘ b

cat a b all

awk 如何合并两个文件的列

下面的例子只是将文件2的列放在了文件1的列后面

如果某列都是数字,对d[NR]=$0

 改为

 $2

或其他对应的列

后面的print改为

 print

$1,

$2+d[FNR]

这样合并不同文件同一行的某一列,如果行不对应,还可以适当更改达到“分类汇总”的效果