我有两个文件 文件 A.txt(群组名称;群组 ID)
wheel:1
www:2
ftpshare:3
others:4
文件B.txt(用户名:UserID:Groupid)
pi:1:1
useradmin:2:3
usertwo:3:3
trout:4:3
apachecri:5:2
guestthree:6:4
我需要创建一个输出,其中显示用户名:userID:组名,如下所示
pi:1:wheel
useradmin:2:ftpshare
(等等)
对于 unix 类,这需要使用 awk 来完成。在花了无数个小时试图弄清楚之后,我想到了这个。
awk -F ':' 'NR==FNR{ if ($2==[a-z]) a[$1] = $4;next} NF{ print $1, $2, $4}' fileA.txt fileB.txt
或者
awk -F, 'NR==FNR{ a[$2]=$2$1;next } NF{ print $1, $2 ((a[$2]==$2$3)?",ok":",nok") }' FileA.txt FileB.txt
有人可以帮我弄清楚这一点以获得正确的输入并向我解释我做错了什么吗?
最佳答案
您可以使用 awk:
awk 'BEGIN{FS=OFS=":"} FNR==NR{a[$2]=$1; next} $3 in a{print $1, $2, a[$3]}' a.txt b.txt
pi:1:wheel
useradmin:2:ftpshare
usertwo:3:ftpshare
trout:4:ftpshare
apachecri:5:www
guestthree:6:others
工作原理:
BEGIN{FS=OFS=":"}
- 将输入和输出字段分隔符设置为冒号FNR==NR
- 仅针对fileA
执行此 block{a[$2]=$1; next}
- 创建一个关联数组a
,键为$2
,值为$1
,然后跳到下一条记录$3 in a
- 如果在数组a
中找到$3
,则对第二个文件执行此 block打印 $1, $2, a[$3]
打印 field1、field2 和a[field3]
关于regex - 在linux中使用awk进行文件比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28693584/