如何仅使用一行中的一个字段比较两个文件并输出差异和相似

时间:2019-04-21 09:32:03

标签: bash shell

我在比较所有passwd和shadow文件的输出时遇到问题,并且仅使用用户名字段就具有相同和不同的输出

我正在使用grep命令

到目前为止,这是我的代码

grep -f shadowfile.txt passwordfile.txt > same.txt
grep -Fxvf shadowfile.txt passwordfile.txt > diff.txt

我希望same.txt具有所有用户,但差异1中没有任何条目

2 个答案:

答案 0 :(得分:0)

我知道的一种方法是使用comm命令

awk -F':' '{ print $1 }' passwordfile.txt | sort > passwordfile.sorted
awk -F':' '{ print $1 }' shadowfile.txt | sort > shadowfile.sorted

comm -12 passwordfile.sorted shadowfile.sorted > same.txt
comm -3 a1 a2 passwordfile.sorted shadowfile.sorted | sed 's/[ \t]*//' > diff.txt

comm 命令需要首先对输入数据进行排序 我已经使用awk and sort命令将排序的用户名列表生成到临时文件中

对于diff.txt,管道中的sed用于删除输出中的空格和制表符

答案 1 :(得分:0)

您可以使用以下命令:

awk -F : '{print $1}' passwd.txt shadow.txt |sort | uniq -u > diff.txt
awk -F : '{print $1}' passwd.txt shadow.txt |sort | uniq -d > same.txt