有两个文本文件; fileA 和 fileB 。
fileB 包含必须附加到 fileA 的字符串,但两个文件中可能已存在某些字符串,我们不想添加重复的行
例如:
fileA内容
Line 1
Line 2
Line 3
Line 4
fileB内容
Line 2
Line 5
Line 6
从 fileB ,第5行和第6行将附加到 fileA 。
我可以编写一个C / C ++可执行文件来执行此操作,但我会从bash脚本中调用它。那么,有一种相当简单的方法可以直接在bash中执行此操作吗?
要添加一些上下文,Macs OS X使用ASL(Apple System Log)代替标准Linux Syslog。它有一个配置文件(asl.conf),我们的产品安装程序将行添加到此文件中。更新必须添加文件中的新行,如果它们不存在于配置中。
答案 0 :(得分:1)
这对你有用吗?
$ cat fileA fileB | sort -u
注意:此方法可以更改行的顺序。
要保留行的顺序,您可以执行以下操作:
#! /bin/sh
cat fileB | while read l; do
! grep -Fxq "$l" fileA && echo "$l" >> fileA
done
答案 1 :(得分:1)
Perl解决方案:
#!/usr/bin/perl
use warnings;
use strict;
my %seen;
open my $A, '<', 'fileA' or die $!;
while (<$A>) { # Read line by line.
print; # Print all lines from fileA.
chomp; # Remove the trailing newline.
$seen{$_} = 1; # Remember the line.
}
open my $B, '<', 'fileB' or die $!;
while (<$B>) {
chomp;
print $_, "\n" unless $seen{$_}; # Print only if not seen!
}
答案 2 :(得分:1)
fgrep -wvf file1 file2 >> file1
-w匹配确切的行。
-v invert。
-f匹配文件
bash$ cat file1
Line 1
Line 2
Line 3
Line 4
bash$ cat file2
Line 2
Line 5
Line 6
bash$ grep -wvf file1 file2
Line 5
Line 6
bash$
答案 3 :(得分:0)
Column 6
单行:
awk