AWK截取文件中的某一列,组合成一行输出

举个例子:

我们要输出系统中以使用默认shell为:“/bin/bash” 的用户,并使用 “,” 分割,以一行输出:

例如:user1,user2,user3

看一下源文件中的数据:

sshd:x:105:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
ntp:x:106:112::/nonexistent:/usr/sbin/nologin
postgres:x:107:114:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
testuser:x:1200:1200:test create user . :/home/testuser:/bin/bash

了解到该文件的组成,很容易达到目的,该文件的是 : 冒号分割的。第一列是用户名,最后一列是默认shell

直接上代码:

 awk 'BEGIN{FS=":"}/\/bin\/bash/ {str=str","$1} END{gsub("^,", "", str); print str}' /etc/passwd

输出:

root,postgres,testuser

逐个解释:

FS=":" 表示指定分割符

/\/bin\/bash/ 是过滤 /bin/bash

str=str","$1 把每一列拼接到最后

gsub("^,", "", str) 删除字符串第一的逗号

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注