gujubiao 发表于 2013-06-17 11:03

请教一个脚本写法,替换/etc/passwd uid为用户名

请问下,我有一个文本,假设为a.txt 只有uid号,我想把这个文本里面的uid号码替换成/etc/passwd文本里面的用户名,请教这个脚本怎么写?谢谢!
例如,我的a.txt里面内容为:
user:id:1234      hello       10
user:id:2345      hi         100

/etc/passwd文本内容:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
zhangsan:x:1234:111::/home/zhangsan:/bin/bash
lisi:x:3210:111::/home/lisi:/bin/bash
wangwu:x:2345:111::/home/wangwu:/bin/bash

我想得到的结果是,假设b.txt,内容如下:
user:id:zhangsan      hello       10
user:id:wangwu      hi         100

井蛙夏虫 发表于 2013-06-17 18:44

本帖最后由 井蛙夏虫 于 2013-06-17 18:45 编辑

回复 1# gujubiao awk -F":" 'BEGIN{OFS=":"}NR==FNR{a[$3]=$1;next}{match($3,/^+/);b=substr($3,RSTART,RLENGTH);sub(/^+/,a,$3);print}' /etc/passwd a.txt

gujubiao 发表于 2013-06-18 10:51

非常感谢。
页: [1]
查看完整版本: 请教一个脚本写法,替换/etc/passwd uid为用户名