0

我想通过匹配每个文件的前 91 个字符来比较 file2 和 file1,并将完整记录从 file2 输出到 file3。我是 Unix 命令的新手,似乎无法弄清楚这一点。

在此先感谢,杰夫

4

2 回答 2

0

您可以使用以下方法比较两个文件cmp

$ cmp file1 file2
file1 file2 differ: byte 92, line 1

如果您只想比较前 91 个字节,可以使用-n开关:

$ cmp -n 91 file1 file2

如果你想在这种情况下做一些事情(例如,将文件复制到另一个文件),你可以使用 bash 的if

if cmp -n 91 file1 file2; then
    cp file2 file3
fi
于 2016-10-28T20:14:48.970 回答
0

我生成的虚拟文件如下:

文件 1

A012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
B012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
C012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
D012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
E012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
F012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789

文件2

Z012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 1
B012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 2
T012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 3
D012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 4
E012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 5
F012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 6

然后我想你想要这个:

awk '
   # Processing for file1, basically create associative array entry indexed by leftmost 91 characters
   FNR==NR { f1[substr($0,1,91)]++; next }

   # Processing for second file
   f1[substr($0,1,91)] > 0

   ' file1 file2

样本输出

B012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 2
D012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 4
E012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 5
F012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 6

实际上,我现在认为您可能确实想要其他行,如果是这样,请更改:

f1[substr($0,1,91)] > 0

对此:

! f1[substr($0,1,91)]
于 2016-10-29T09:40:05.413 回答