Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找不同文件的两列之间的匹配项,并将第三列替换为awk_Awk - Fatal编程技术网

查找不同文件的两列之间的匹配项,并将第三列替换为awk

查找不同文件的两列之间的匹配项,并将第三列替换为awk,awk,Awk,我正在寻找一种方法来替换文件中的一列,如果两个ID列匹配。 我有一个文件A.txt c a b ID 0.1 0.01 5 1 0.2 0.1 6 2 0.3 2 3 ID a b 1 10 15 2 20 16 3 30 12 4 40 14 ID a b 1 0.01 5 2 0.1 6 3 30 2 和文件B.txt c a b ID 0.1

我正在寻找一种方法来替换文件中的一列,如果两个
ID
列匹配。 我有一个文件
A.txt

c     a   b   ID
0.1  0.01 5   1
0.2  0.1  6   2
0.3       2   3
ID   a   b
1   10   15
2   20   16
3   30   12
4   40   14
ID a    b   
1  0.01 5   
2  0.1  6   
3   30  2   
和文件
B.txt

c     a   b   ID
0.1  0.01 5   1
0.2  0.1  6   2
0.3       2   3
ID   a   b
1   10   15
2   20   16
3   30   12
4   40   14
ID a    b   
1  0.01 5   
2  0.1  6   
3   30  2   
我想要的输出是 文件
A.txt

c     a   b   ID
0.1  0.01 5   1
0.2  0.1  6   2
0.3       2   3
ID   a   b
1   10   15
2   20   16
3   30   12
4   40   14
ID a    b   
1  0.01 5   
2  0.1  6   
3   30  2   
我发现这是可能的与以下

awk 'NR==FNR{ if(NR>1) a[$1]=$2; next }
     FNR>1 && $1 in a && NF<3{ f=$2; $2=a[$1]; $3=f }1' B.txt A.txt | column -t
awk 'NR==FNR{ if(NR>1) a[$1]=$2; b[$1]=$1; next }
     FNR>1 && $1~ /b[$1] in a && NF<3{ f=$2; $2=a[$1]; $3=f }1' eaf.txt final.txt | column -t
但它不起作用。有办法解决吗?谢谢您

awk解决方案:

awk 'NR==FNR{ if(NR>1) a[$1]=$2; next }
     FNR==1{ print $NF,$2,$3; next }   # output the header line rearranged
     FNR>1 && ($NF in a){ $1=$NF; if(NF<4) { f=$2; $2=a[$1]; $3=f } else $NF="" 
     }1' B.txt A.txt | column -t

向下投票时通常会进行注释。当使用默认的
FS
时,您需要指定
FS
(例如使用tab和
FS=“\t”
),因为
A.txt
NR==4
时没有$2。除此之外,这应该足够了:
awk'NR==FNR{a[$1];next}$4在a{print$4,$2,$3}'bA
中。您需要告诉我们
a.txt
是否是制表符分隔的或固定宽度的字段或其他内容,否则我们如何编写工具来确定第4行上缺少的值是第2行?