嘿伙计们我需要一些帮助, 我的目标是匹配查找或匹配file2
中file1的第一部分File1中:
\\tempcomputer\c$\test2;test folder;c:\test2
\\tempcomputer\c$\temp;temp folder;C:\temp
\\tempcomputer\c$\unavailablefolder;c:\unavailablefolder
文件2:
\\tempcomputer\c$\test2\;2.777.768 Bytes;11/09/12;11/09/12
\\tempcomputer\c$\temp\;5.400.050.974 Bytes;10/09/12;11/09/12
Error: Invalid property element: \\tempcomputer\c$\unavailablefolder
预期产出:
\\tempcomputer\c$\test2;test folder;c:\test2;2.777.768 Bytes;11/09/12;11/09/12
\\tempcomputer\c$\temp;temp folder;C:\temp;5.400.050.974 Bytes;10/09/12;11/09/12
\\tempcomputer\c$\unavailablefolder;c:\unavailablefolder;Error: Invalid property element: \\tempcomputer\c$\unavailablefolder
我想比较一下file1的第一行:
\\tempcomputer\c$\test2
在第二个文件上搜索,并从file1
连接两个文件\\tempcomputer\c$\test2;test folder;c:\test2
和来自file2
c:\test2;2.777.768 Bytes;11/09/12;11/09/12
所以第一行是:
\\tempcomputer\c$\test2;test folder;c:\test2;2.777.768 Bytes;11/09/12;11/09/12
第一行的预期结果:
\\tempcomputer\c$\test2;test folder;c:\test2;2.777.768 Bytes;11/09/12;11/09/12
第二行的预期结果:
\\tempcomputer\c$\temp;temp folder;C:\temp;5.400.050.974 Bytes;10/09/12;11/09/12
第三行的预期结果:
\\tempcomputer\c$\unavailablefolder;c:\unavailablefolder;Error: Invalid property element: \\tempcomputer\c$\unavailablefolder
答案 0 :(得分:2)
如果它是 c00kiemon5ter 表示带有反斜杠的复制粘贴错误,那么对于File2
中的每一行迭代File1
都很简单,我假设你想要找不到匹配项时没有输出。
simple.awk
BEGIN { FS = OFS = ";" }
{
l=$0
first=$1
while(getline < "File2") {
if(first == $1) {
print l, $0
break
}
}
}
使用以下命令运行:
awk -f simple.awk File1
要在最后允许一个可选的反斜杠需要更多的工作,但大多数额外的复杂性可以移动到一个函数:
更work.awk
function optional_end(s, c) {
if(c == "")
c = "\\"
if(substr(s, length(s)) == c)
s = substr(s, 1, length(s) - 1)
return s
}
BEGIN { FS = OFS = ";" }
{
l=$0
first = optional_end($1)
while(getline < "File2") {
if(first == optional_end($1)) {
print l, $0
break
}
}
}
使用以下命令运行:
awk -f more-work.awk File1
由c00kiemon5ter编辑:3
修订 simple.awk 。
使用\;
第一个字段行结尾和打印 - 也加入第3行。
BEGIN { FS = OFS = ";"; if( file == "") file = "File2" }
{
l=$0
first=$1
while(getline < file) {
if((idx = index($0, first))) {
if (idx == 1)
$1 = l
else
$1 = l FS $0
print
break
}
}
}
编辑2
输入文件现在可以作为选项-v file=SOME_FILE
给出;如果没有给出“File2”,例如:
awk -f simple.awk -v file=SOME_FILE File1
答案 1 :(得分:2)
假设File2中的路径末尾没有终端反斜杠,请执行以下操作:
join -t ';' <(sort File1) <(sort File2)
将输出:
\\tempcomputer\c$\temp;temp folder;C:\temp;5.400.050.974 Bytes;10/09/12;11/09/12
\\tempcomputer\c$\test2;test folder;c:\test2;2.777.768 Bytes;11/09/12;11/09/12