繁体   English   中英

比较两个不同的文件

[英]Comparing two different files

说我有两个看起来像这样的数据文件。

A dog 3
A cat 1
A mouse 4
A chicken 4

B tiger 2
B chicken 1
B dog 3
B wolf 2

我如何才能仅查看两个文件中共有的动物? 理想情况下,我希望输出看起来像

dog 3 3
chicken 4 1

但是,即使仅输出两个文件中常见的值及其值,对我来说也足够了。 谢谢。

这种单线应该做的:

awk 'NR==FNR{a[$2]=$2 FS $3;next}a[$2]{print a[$2],$3}' f1 f2 

@Kent做过一些严肃的单线魔术。 无论如何,我做了一个可以尝试的shell脚本。 只需运行./script[file1] [file2]

#!/bin/bash

# Read input
words1=$(cat $1 | sed -r "s/.*\ (.*)\ .*/\1/")
val1=$(cat $1 | sed -r "s/.*\ .*\ (.*)/\1/")
words2=$(cat $2 | sed -r "s/.*\ (.*)\ .*/\1/")
val2=$(cat $2 | sed -r "s/.*\ .*\ (.*)/\1/")

# Convert to array 
words1=($words1)
val1=($val1)
words2=($words2)
val2=($val2)

# Iterate and print result
for i in "${!words1[@]}"; do
    for j in "${!words2[@]}"; do
        if [ ${words1[i]} == ${words2[j]} ]; then
            echo "${words1[i]} ${val1[i]} ${val2[j]}"
            break
        fi
    done
done

exit 0

我不确定为什么这是一个linux / unix问题。 看起来您需要的是一个需要编写的简单程序,因为这不是Beyond Compare之类的应用程序通常会涵盖的基本“两文件比较”问题。

假设这些文件是基本的文本文件,每行包含一个记录,并用空格分隔。 (使用空格作为分隔符很危险,但这就是上面的内容)。 您需要读入每个文件,将两个文件都存储为[iterable collection],并让每个对象成为在每次循环中作用的字符串,或者在从文件构建时分解为多个字符串。 您需要将第一个文件中的[linepart 1]与第二个文件中的每个[linepart 1]进行比较,每当找到匹配项时,中断并输出[linepart 1] [A.linepart 2] [B.linepart 2 ]。

我想不出任何现有的程序可以为您做到这一点,但是使用Java,C#等来处理它相当简单(假设您认为文件IO很简单)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM