『壹』 awk 如何合并两个文件的列
下面的例子只是将文件2的列放在了文件1的列后面如果某列都是数字,对d[NR]=$0改为$2或其他对应的列后面的print改为print$1,$2+d[FNR]这样合并不同文件同一行的某一列,如果行不对应,还可以适当更改达到“分类汇总”的效果
『贰』 如何用awk在一个文件中搜索另一个文件中的内容并输出
试试用管道,不用awk这么麻烦,直接cut -d ' ' -f 1,直接获取第一列,再从列中取行作为文件索引,一条命令不行就多用几条
『叁』 awk将两个文件进行关联合并n
如果是通过第一列关联,结果应该是这样:a1 100 200 a2 a2_1 a2_2a1 100 200 a2 a2_3 a2_4b1 100 200 b2 b2_1 b2_2c1 100 200 b2 b2_3 b2_4c1 100 200 b2 b2_5 b2_6c1 100 200 c2 c2_1 c2_2 所以,我没看懂如何通过第一列关联得到你版说的那个结果。权
『肆』 awk 对比两个文件中的数据项,输入到新文件
用awk数组来做。
awk'ARGIND==1{w[$2]=$1}ARGIND==2{flag=0;for(ainw)if($2==a){flag=1;print$1,w[a],$2,$3,$4;break;}if(!flag)print$1,"x",$2,$3,$4}'file2file1
ARGIND==1 表示处理的是第一个文件 file2
ARGIND==2 表示处理的是第二个文件 file1
原则是:内容专较少的文属件先处理,遍历读入并保存到数组,以要比较的值为数组下标(这里就是第二列的id值),需要打印显示的内容存为对应的元素值(这里就是第一列的时间值)。然后再处理内容较多的文件,对其每一行内容都使用for循环遍历数组下标进行比较。
这里设置了一个flag来标识file1中的id在数组中(file2中)是否存在。
由于你的数据文件有上万行,所以速度肯定快不了。
『伍』 awk操作两个文件
最简单的办法是paste a.txt b.txt
用awk的话
awk 'BEGIN{while(getline var < "/tmp/a.txt" > 0 )a[i++]=varwhile(getline var < "/tmp/b.txt" > 0)b[j++]=varfor(k=1;k<(i>j?i:j);k++)print a[k] "" b[k]}'
注意a.txt b.txt须给全路径
『陆』 awk如何同时逐行扫描两个文件
据我了解awk的处理机制是先逐行处理一个文件,结束后再处理后面的回文件。没办法同时答扫描两个文件的同一行,但是仍然可以实现你要的处理如果两个文件有关联【比如处理后面的文件时,需要用到第一个文件相同行上的一些数据】可以用awk数组(类似词典)先将第一个文件的数据进行保存区分第一、第二个文件的办法:FNR==NR{#这是第一个文件,这里可以写保存数据的代码,比如data[FNR]=$0}NR>FNR{#【或NR!=FNR】是第二个文件,可以在这里写数据处理方式,比如print $0+data[FNR] }
『柒』 关于awk两个文件进行比对的问题
|awk'BEGIN{FS=OFS="|"}NR==FNR{w[$1]=$2;m[$1]=$3}NR>FNR{for(ainw)if(a==$1&&w[a]!=$2){printa,w[a],m[a],$1,$2;break}}'file1file2>file
NR==FNR就是在处理第一个文件file1
NR>FNR就是在处理第二个文件file2
提醒一下:file是一个shell命令(你专看,这边被语法高亮属了),建议平时写脚本时文件名、变量名等都尽量不要跟shell命令重合,虽然有时也没什么问题。
『捌』 linux脚本用awk处理两个文件写入mysql数据库
懂awk,知道如何从文件中取出值,但数据库语句不太熟悉,能否给出最版终组织的数据库语句?权
我只能先写到这里:
#!/bin/shsed's/,//'b.txt|awk'NR==FNR{w[$2]=$1}NR>FNR{sub(".*/","",$1);for(ainw)if($1==a){printf("GROUP=%s,MONEY=%s,WORD=%s",a,w[a],$2);break}}'a.txt-
就一条语句。
awk对两个文件的处理,参见我的网络空间中shell分类下的文章《shell – awk – sed》,看看其中的awk章节。
『玖』 awk怎么打印俩个文件不同的地方
awk 'BEGIN{n=1}NR==FNR{dict[NR]=$0;al=FNR}NR!=FNR{if(FNR>al){print "line:"FNR"\tA:NULL\tB:"$0}else{if($0!=dict[n]){print "line:"FNR"\tA:"dict[n]"\tB:"$0}}n++;bl=FNR}END{bl++;while(bl<=al){print "line:"bl"\tA:"dict[bl]"\tB:NULL";bl++}}' a b(注意:上述为一行命令,复制粘贴即可)两个文件行号回相同的行内容不同答就会打印:line:行号 A:文件a此行内容 B:文件b此行内容你的问题自己再研究下吧,对awk的 内建变量 与 文件驱动 理解不到位造成的。
『拾』 如何用AWK实现2个文件的合并:如
实现你的需求其实不需要awk,使用join反而更简单;join-t'|'-a1ab一个命令搞定;简单解释一下,join可以连接有相同字段的文件,-t指定分隔符为‘|’,-a1意思是左连接a文件;使用这条命令得到的结果会和你要求的格式有一点小小的出入,表现在'|'的数量上,修正如下:join-t'|'-a1ab|sed-e's/||/|/g'|sed'/TCSI/!s/|$/&|/g'会得到你要的结果使用我提供的命令有一个前提:PSID这个字段是排过序的,看你提供的样例应该是满足的;
未经允许不得转载:山九号 » awk两文件内容|linux脚本用awk处理两个文件写入mysql数据库