Linux

比較 bash 中的兩個使用者列表

  • August 29, 2017

我有兩個不同的使用者列表。我需要比較使用者並確保它們存在於兩個文件中。一個是 passwd 文件,另一個是包含使用者名和其他資訊的平面文件,我可以從中提取已排序的使用者名列表。

這給了我一個使用者名的排序列表:

cat /etc/passwd | cut --fields=1 | sort -k1.2

有沒有更好的方法來做到這一點,第二,我如何將它與另一個文件中的另一個使用者列表進行比較?如果使用者不存在,我會將其添加到平面文件中。

這應該適用於您使用 bash、diff、awk 和 sort 的程序替換:

diff <(awk -F: '{print $1}' /etc/passwd | sort) <(sort your_other_list_file)

這假設您your_other_list_file只包含使用者名,每行一個。除非您發布範例行,否則無法幫助您解析。

comm -3 <( (cut -f1 -d: /etc/passwd | sort) ) <(sort file2)

我最喜歡這個,它是單行的,避免了 awk,並comm為您提供了選項,可以為您提供 list1、list2 獨有的條目或兩者的共性。在排序之前進行切割也可以對較短的字元串進行排序,因此在較長的列表中可能會更快。

引用自:https://serverfault.com/questions/167760