除了DOS行尾问题之外,还有一些一般性的提示:
cat
是用于连接文件的命令,它不是唯一可以读取文件的工具!如果一个命令不能读取文件,则可以使用重定向,例如command < file
。
您可以使用-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
为了获得所需的输出,您可以采取各种方法。我可能会使用
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
$0
(或$1
)返回一个以\r
结尾的字符串,导致“覆盖”初始列的意外行为。 - Oleg Afanasyev