gpt4 book ai didi

unix - AWK 首先打印字段 $2,然后打印字段 $1

转载 作者:行者123 更新时间:2023-12-03 07:47:57 24 4
gpt4 key购买 nike

这是输入(示例):

name1@gmail.com|com.emailclient.account
name2@msn.com|com.socialsite.auth.account

我正在努力实现这一目标:

Emailclient name1@gmail.com
Socialsite name2@msn.com

如果我像这样使用 AWK:

cat foo | awk 'BEGIN{FS="|"} {print $2 " " $1}'

它将字段 1 覆盖在字段 2 的顶部,从而弄乱了输出。

有什么提示/建议吗?谢谢。

最佳答案

一些一般提示(除了 DOS 行结束问题):

cat用于连接文件,它不是唯一可以读取文件的工具!如果命令不读取文件,则使用重定向,如 command < file

您可以使用 -F 设置字段分隔符选项 so 而不是:

cat foo | awk 'BEGIN{FS="|"} {print $2 " " $1}' 

尝试:

awk -F'|' '{print $2" "$1}' foo 

这将输出:

com.emailclient.account name1@gmail.com
com.socialsite.auth.accoun name2@msn.com

要获得所需的输出,您可以执行多种操作。我可能会split()第二个字段:

awk -F'|' '{split($2,a,".");print a[2]" "$1}' file
emailclient name1@gmail.com
socialsite name2@msn.com

最后将 awk 中的第一个字符转换为大写有点痛苦因为你没有一个很好的内置ucfirst()功能:

awk -F'|' '{split($2,a,".");print toupper(substr(a[2],1,1)) substr(a[2],2),$1}' file
Emailclient name1@gmail.com
Socialsite name2@msn.com

如果您想要更简洁的(尽管您放弃了子流程),您可以这样做:

awk -F'|' '{split($2,a,".");print a[2]" "$1}' file | sed 's/^./\U&/'
Emailclient name1@gmail.com
Socialsite name2@msn.com

关于unix - AWK 首先打印字段 $2,然后打印字段 $1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15597666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com