假设现有下面4个文件:
file1: file2: file3: file4:
116 t1 116 1000 100 t1 115 600
117 t2 117 1500 105 t2 100 700
118 t3 118 800 110 t3 110 800
115 t4 105 900
200 300
1. 比较file1和file2: (下面是一行命令,非两行)
awk 'FILENAME==ARGV[1]{a[FNR]=$1;b[FNR]=$2};FILENAME==ARGV[2]{for(i=1;i<=length(a);i++){if(a[i]==$1){print b[i],$2}}}' file1 file2 | sort -u
结果:
t1 1000
t2 1500
t3 800
2. 比较file3和file4: (下面是一行命令, 非两行)
awk 'FILENAME==ARGV[1]{a[FNR]=$1;b[FNR]=$2};FILENAME==ARGV[2]{for(i=1;i<=length(a);i++){if(a[i]==$1){print b[i],$2}}}' file3 file4 | sort -u
结果:
t1 700
t2 900
t3 800
t4 600
执行情况见下面截图:
__________________________________________________________________________
补充:
“我想要的结果是
文件2中的第一个字段即(116,117,118)和文件1中的第一个字段即(116,117,118)每行进行对比如果相同的话 替换成下面这样的
t1 1000
t2 1500
t3 118 “
——————————————————————————————————————————
如果不同的话需不需要展示出来?
上面的命令是只展示匹配到的
如果想把 不匹配的也展示出来, 用下面的命令:
awk 'FILENAME==ARGV[1]{a[FNR]=$1;b[FNR]=$2};FILENAME==ARGV[2]{for(i=1;i<=length(a);i++){if(a[i]==$1){$1=b[i]}};print $1,$2}' file3 file4 | sort -u
结果
200 300
t1 700
t2 900
t3 800
t4 600
awk 'NR==FNR{a[$1]=$2}NR!=FNR{print a[$1]" "$2}' file1 file2