如何输出2个文件之间的差异?


11

我的文件包括以下内容;大致:

username:username:username:username:username 

上面的行继续到大约600个字符。

我使用awk命令是为了将其用作从命令行发送的API / HTTP请求中的参数。

我正在使用脚本获取“跟随”我的用户帐户列表,每隔24小时左右,将硬盘上的原始列表与新输出的用户名列表进行比较(并回显不再关注的用户)我。我将不得不使用bash ..测试每个用户名将我的逻辑封装到一个循环中。

我当前的脚本:

user=$(awk -F: '{ print $1 }' FILE)  # Grab $User to use as an argument.  
following=$(exec CURRENT_FOLLOWERS) # Outputs the new file

echo "X amount of users are following you on 78B066B87AF16A412556458AC85EFEF66155"  

          SAVE CURRENT FOLLOWERS TO NEW A FILE.  


if [[ DIFFERENCE IS DETECTED ]] ; then    

          echo -ne "$User NO LONGER FOLLOWING YOU\r"

   else echo -ne "This user is following you still.\r"
fi

我的问题是;
如何输出2个文件之间的差异?


你知道diff吧?
schaiba 2014年

@schaiba谢谢。刚刚在另一个论坛上遇到了,效果很好。在那之前我没有偶然发现过它。我希望这个答案对其他成员将来的查询很有用。
2014年

@schaiba可能也会回答它。确保处理上DIFF工作线不虽然领域。
terdon

Answers:



13

给定两个包含未排序用户列表的文件,例如

In file1:
    userD
    user3
    userA
    user1
    userB

In file2:
    user3
    userB
    userX
    user1

然后要获取file1而不是中的用户的简单列表file2,您可以

$ comm -23 <(sort file1) <(sort file2)
userA
userD

同样可以吸引用户,file2但不能吸引用户file1

$ comm -13 <(sort file1) <(sort file2)
userX

如果列表文件已经排序,则可以分别简化为comm -23 file1 file2comm -13 file1 file2


1
是否可以comm不分类使用?我的文本文件中有值喜欢120102000000010002,等使用sort会去排序顺序...
兰提


3

diff [options] from-file to-file

diff比较源文件和目标文件这两个文件的内容。您可以指定-i忽略大小写更改的选项;考虑大小写字母的等效性。

有关更多信息,您可以参考以下链接:http : //www.computerhope.com/unix/udiff.htm或查看手册页。


2

您可以尝试fc在Unix和Linux中使用相同的窗口(如command),即diff <file_new> <file_old>command。

与它们前面+++---前面的行已更改,没有+'s-'s没有更改的行

-符号的行已从新文件中删除,但是它们存在于旧版本中

带有+符号的行从新文件中添加,但在旧版本的文件中不存在

Linux符号

Linux使用><

>表示旧文件中<的行表示旧 文件中已更改的新文件中的行


0

选择vimdiff来显示同一文件的两个,三个或四个版本之间的差异。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.