我真的很擅长Bash和脚本编写。 我必须创建由名字的第一个字母后跟姓氏组成的用户名。为此,我使用提供的文本文件,如下所示:
doe,john
smith,mike
...
我声明了以下变量:
fname=$(cut -d, -f2 "file.txt" | cut -c1)
lname=$(cut -d, -f1 "file.txt")
但是如何将元素组合在一起形成名称 jdoe 和 msmith ?我尝试了我知道的连接字符串和变量的方法,但没有任何作用..
我想我找到了一个使用 awk 的方法,但是有没有其他方法来“连接”2个列表的元素? 谢谢
答案 0 :(得分:3)
有一百万种方法可以做到这一点,这是最简单的:
$ awk -F, '{print substr($2,1,1) $1}' file
jdoe
msmith
答案 1 :(得分:1)
这看起来有点像家庭作业,所以我只是提出一些提示。
要将lastname和firstname读入文件每行的单独变量,请参阅BashFAQ 1。它不应涉及cut
。
要获取变量的第一个字符,请参阅BashFAQ 100。
答案 2 :(得分:1)
Ed Morton's awk
-based answer最简单(也可能是最快的),但是因为你要求一个不同的解决方案:
#!/usr/bin/env bash
while IFS=, read -r last first _; do
username=${first:0:1}${last}
echo "username: $username"
done < file.txt
IFS=, read -r last first _
从每个输入行读取前两个,
- 分隔的字段(_
是一个虚拟变量,接收输入行的其余部分(如果有); {{1}阻止在输入中解释-r
字符。这通常是你想要的。)\
连接第一个字符。变量username=${first:0:1}${last}
的值具有变量$first
的值,只需将两个变量引用放在一起。
$last
- 从位置${first:0:1}
的{{1}}中提取1
字符 - 是parameter expansion的示例,具体为:substring expansion $first
是一个输入重定向,通过stdin将0
的内容发送到< file.txt
循环。