这是输入(样本):
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}'
它通过在字段2的顶部覆盖字段1来弄乱输出。
任何提示/建议?谢谢。
几个一般提示(除了DOS行结束问题):
cat用于连接文件,它不是唯一可以读取文件的工具!如果命令不读取文件,则使用重定向,如命令<文件。 您可以使用-F选项设置字段分隔符,而不是:
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
要获得所需的输出,您可以做各种各样的事情。我可能会分裂()第二个字段:
awk -F'|' '{split($2,a,".");print a[2]" "$1}' file emailclient name1@gmail.com socialsite name2@msn.com
最后将第一个字符转换为大写是awk的一点点痛苦,因为你没有一个很好的内置ucfirst()函数:
awk -F'|' '{split($2,".");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,".");print a[2]" "$1}' file | sed 's/^./\U&/' Emailclient name1@gmail.com Socialsite name2@msn.com