簡體   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