Linux Awk命令文件:如何完成此任务

Linux Awk命令文件:如何完成此任务,linux,bash,awk,Linux,Bash,Awk,在awk中,有toupper()来大写文本,还有gsub()来替换文本 我已经看到了如何在一个文件上执行每个任务的示例,它们都很有效,但是我很好奇如何创建一个命令文件,当使用“who”命令行时,它将完成以下任务: 而不是像这样输出“谁”: firstname.lastname pts/# .....[other information] 它将输出如下所示: Firstname, Lastname TTY # [other information removed] 请问如何在awk命令

在awk中,有
toupper()
来大写文本,还有
gsub()
来替换文本

我已经看到了如何在一个文件上执行每个任务的示例,它们都很有效,但是我很好奇如何创建一个命令文件,当使用“who”命令行时,它将完成以下任务:

而不是像这样输出“谁”:

firstname.lastname pts/# .....[other information]
它将输出如下所示:

Firstname, Lastname TTY #     [other information removed]

请问如何在awk命令文件中完成此任务?

awk
救命

对于任何领域,您都可以这样做

awk '{print toupper(substr($1,1,1)) tolower(substr($1,2,length($1)-1))'

我不熟悉firstname.lastname who格式(我看到的是userid)。

awk
救命

对于任何领域,您都可以这样做

awk '{print toupper(substr($1,1,1)) tolower(substr($1,2,length($1)-1))'

我不熟悉firstname.lastname格式(我看到的是userid)。

必须有一种更干净的方法,但这是我的尝试

echo "firstname.lastname pts/# .....[other information]" |
awk  'r=gensub(/([[:alnum:]]*)\.([[:alnum:]]*).*/, "\\1 \\2", "",$1),
split(r,a," ")
{ print toupper(substr(a[1],1,1)) substr(a[1], 2) " " toupper(substr(a[2],1,1)) substr(a[2], 2) " TTY#" }'

一定有更干净的方法,但这是我的尝试

echo "firstname.lastname pts/# .....[other information]" |
awk  'r=gensub(/([[:alnum:]]*)\.([[:alnum:]]*).*/, "\\1 \\2", "",$1),
split(r,a," ")
{ print toupper(substr(a[1],1,1)) substr(a[1], 2) " " toupper(substr(a[2],1,1)) substr(a[2], 2) " TTY#" }'

你在什么环境下工作?我从未见过谁输出firstname.lastname…当“uname-r”输入到命令行时,输出是:3.11.10-29-desktop,是linuxOK,很抱歉,我的问题不是很具体。我想知道的是你的用户是如何进行身份验证的,你的主机的用户信息是从哪里存储/检索的。啊,恐怕不是我的服务器xD,而是我们连接到的uni的服务器,不确定该信息=/和所需输出中的字符串TTY,是静态的吗?你在什么环境下工作?我从未见过谁输出firstname.lastname…当“uname-r”输入到命令行时,输出是:3.11.10-29-desktop,是linuxOK,很抱歉,我的问题不是很具体。我想知道的是你的用户是如何进行身份验证的,你主机的用户信息是从哪里存储/检索的。啊,我恐怕不是我的服务器xD,而是我们连接到的uni的服务器,不确定该信息=/以及所需输出中的字符串TTY,是静态的吗?
who
的输出完全取决于系统身份验证。在我们的一个生产环境中,我们使用radius进行身份验证。
userid
采用
firstname.lastname
格式。简而言之,它是userid:)who的输出完全取决于系统身份验证。在我们的一个生产环境中,我们使用radius进行身份验证。
userid
采用
firstname.lastname
格式。简而言之,它是用户ID:)