【问题标题】:compare line by line: two files in unix逐行比较:unix中的两个文件
【发布时间】:2016-03-22 14:28:34
【问题描述】:

PFB 场景。我有两个文件

文件1

firstName1 LastName1
FirstName2 LastName2

文件2

FirstName1 LastName1
FirstName2 LastName2

现在我想比较 file1 的 FirstName1 和 file2 的 FirstName1。如果匹配,则将 file1 的 LastName1 与 File2 的 LastName1 进行比较。

如果这些值中的任何一个不匹配,则应将记录写入日志文件。

完成此操作后,移至第二条记录。

哪位大神可以分析一下……

【问题讨论】:

标签: file unix


【解决方案1】:

使用以下标准 unix 命令

diff
sdiff

这个page 也将有助于理解 diff 和 sdiff 之间的区别。

您还可以编写一个脚本来比较两个文件中的记录。

【讨论】:

    【解决方案2】:

    diff 最适合您想要做的事情,但如果您想在这种情况下进行更多操作,假设文件格式正确,这里有一个 sn-p

    ./compare.sh <file1> <file2>
    

    比较.sh:

    #!/bin/bash
    
    line_number=0
    
    cat $1 | while read line_f1; do
    
        line_number=$((line_number + 1))
    
        line_f2=$(cat $2 | sed "${line_number}q;d")
    
        echo "line f1 : ${line_f1}"
        echo "line f2 : ${line_f2}"
    
        firstname_f1=$(echo ${line_f1} | cut -f1 -d' ')
        firstname_f2=$(echo ${line_f2} | cut -f1 -d' ')
        lastname_f1=$(echo ${line_f1} | cut -f2 -d' ')
        lastname_f2=$(echo ${line_f2} | cut -f2 -d' ')
    
        echo "firstname f1 : ${firstname_f1}"
        echo "firstname f2 : ${firstname_f2}"
        echo "lastname f1 : ${lastname_f1}"
        echo "lastname f2 : ${lastname_f2}"
    
        if [ ! "${firstname_f1}" = "${firstname_f2}" ]; then
            echo "Differents Firstnames"
        fi
    
        #... place here other tests ...
    
    done
    

    【讨论】:

    • 嗨,谢谢您的回复..这里使用的文件名是什么?是 f1 吗?一开始你所说的 cat $1 是什么意思......提前谢谢......
    • 实际上,脚本将您的 2 个文件作为参数 cat $1 将读取第一个文件(参数),而您稍后在脚本中有一个 cat $2 用于第二个文件(参数)。我对其进行了编辑,使其更清晰。
    猜你喜欢
    • 1970-01-01
    • 2016-10-23
    • 2015-12-02
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    相关资源
    最近更新 更多