我有两个文件,文件的格式是变量=值或#或#变量。所有变量的值都是未设置;是;mod。我想将这些文件中的所有条目复制到另一个文件,并且只保留唯一条目。如果两个文件具有相同的变量但值不同。我想复制带有=mod的变量。如何使用 awk 或 sed 或 grep 或 bash 脚本实现此目的?
我通常通过合并文件并复制结果到 excel 中来手动执行此操作。在 excel 中,我使用 excel 中的删除重复项功能,然后根据上述要求手动删除条目。
答案1
使用您最习惯的任何语言来构建程序。逻辑:
While not EOF (file1)
{
Read line from file1
While not EOF (file2)
{
Read line from file2
If l-file1 = l-file2
{
do nothing
}
Else
{
output unique value
}
}
}
这将比较文件 1 的每一行与文件 2 的每一行(而不是逐行比较)。
答案2
尝试使用这个awk
脚本:
NR==FNR { data[$1] = $2; next; }
!/#/ {
if ($1 in data) {
if ($1 == "mod") {
print $0;
} else {
print $1 "=" data[$1];
}
} else {
print $0;
}
}
像这样调用它:
awk -f script -F= file1 file2
答案3
Perl 一行程序
文件一:
1
2
3
文件二:
1
4
3
仅打印唯一行
perl -lne 'print if ++$n{ $_ } == 1 ' file_one.txt file_two.txt
或者
perl -lne 'print unless ++$n{ $_ } ' file_one.txt file_two.txt
输出
1
4
3
2