Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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_Partial Matches - Fatal编程技术网

awk-两个文件之间的几列的部分匹配,并返回两个文件的一行,并用逗号连接

awk-两个文件之间的几列的部分匹配,并返回两个文件的一行,并用逗号连接,awk,partial-matches,Awk,Partial Matches,我有两个文件,每个文件包含以下内容: /tmp/mydir-1: direction=1, code=a b c d, time=xxxx direction=1, code=f x fdfsdf sdfs, time=xxxx direction=1, code=a b c f, time=xxxx 第二个文件/tmp/mydir-2: direction2=2, code2=a b c fsd, time2=xxxx direction2=2, code2=f x fdfsdf sdfs,

我有两个文件,每个文件包含以下内容:

/tmp/mydir-1

direction=1, code=a b c d, time=xxxx
direction=1, code=f x fdfsdf sdfs, time=xxxx
direction=1, code=a b c f, time=xxxx
第二个文件
/tmp/mydir-2

direction2=2, code2=a b c fsd, time2=xxxx
direction2=2, code2=f x fdfsdf sdfs, time2=xxxx
direction2=2, code2=a b c ff, time2=xxxx
我希望在文件2中只匹配包含与第一个文件中的
code=XXX
匹配的
code=XXX
的行,并返回由
连接的两个文件的每一行

这意味着如果在这里,这两个文件之间唯一匹配的行是:

direction=1, code=f x fdfsdf sdfs, time=xxxx

因此,要返回:

direction=1, code=f x fdfsdf sdfs, time=xxxx, direction2=2, code2=f x fdfsdf sdfs, time2=xxxx
我是awk的新手。。我需要做一些事情,但仍然不知道如何将这些事情联系起来

我知道,通过此操作,我可以拆分代码或代码2列,并在
=
之后打印实际值,方法是:

cat /tmp/mydir-1 |  awk -F ', ' '{split($2,aa,"="); print aa[2]}'
这将返回:

a b c d
f x fdfsdf sdfs
a b c f
现在,我试图将代码列按
=
拆分,并比较两个文件之间的值,这就是我出错的地方

当我执行此命令时:

awk -F ', ' 'FNR==NR {split($2,aa,"="); a[aa[2]]; next} split($2, aaa, "="); aaa[2] in a' /tmp/mydir-1 /tmp/mydir-2
我长得很高,线条是重复的
mydir-2

direction2=2, code2=a b c f, time2=xxxx
direction2=2, code2=a b c f, time2=xxxx
direction2=2, code2=f x fdfsdf sdfs, time2=xxxx
direction2=2, code2=f x fdfsdf sdfs, time2=xxxx
direction2=2, code2=a b c ff, time2=xxxx
这就是我被困的地方。我猜我是在比较第二个文件和它自己?我真的不知道如何从这里继续下去

如能提供有关此问题的任何信息,将不胜感激

谢谢

更新

谢谢@KamilCuk的更新

我更改了变量名,下面是命令:

awk -F ', ' 'FNR==NR {split($2,f1split,"="); f1[f1split[2]]; next} {split($2, f2plit, "=");} f2split[2] in f1' /tmp/mydir-1 /tmp/mydir-2
如@KamilCuk所述,我在
{}
中为第二个文件添加了第二个拆分,当我执行它时,结果为空

变量名以及我认为它们的含义:

f1: first file
f2: 2nd file
f1split: first file 'code' split
f2split: 2nd file 'code2' split
在awk代码与第一个文件和第二个文件相关的问题上,我是否正确理解了awk语法

awk 'FNR==NR {<CODE FOR FIRST FILE>} <CODE FOR 2nd FILE>' /tmp/mydir-1 /tmp/mydir-2
awk'FNR==NR{}'/tmp/mydir-1/tmp/mydir-2

split
返回元素数,因此它不是零,所以它打印行。把它放在
{
}

awk -F ', ' '
FNR==NR{
      split($2, aa, "=");
      a[aa[2]];
      next
}
# empty non-zero expression prints the line
# put it inside { } to silence output
{ split($2, aaa, "=") }

# Use different variables names then a aa aaa....
aaa[2] in a
' /tmp/mydir-1 /tmp/mydir-2
awk -F ', ' '
FNR==NR{
      split($2, aa, "=");
      a[aa[2]];
      next
}
# empty non-zero expression prints the line
# put it inside { } to silence output
{ split($2, aaa, "=") }

# Use different variables names then a aa aaa....
aaa[2] in a
' /tmp/mydir-1 /tmp/mydir-2
$ cat tst.awk
BEGIN { FS="[=,]"; OFS=", " }
NR==FNR {
    file1[$4] = $0
    next
}
$4 in file1 {
    print file1[$4], $0
}
$ awk -f tst.awk file1 file2
direction=1, code=f x fdfsdf sdfs, time=xxxx, direction2=2, code2=f x fdfsdf sdfs, time2=xxxx