从文本文件编写用户名创建脚本?

时间:2015-05-18 21:37:05

标签: bash awk scripting username

我真的很擅长Bash和脚本编写。 我必须创建由名字的第一个字母后跟姓氏组成的用户名。为此,我使用提供的文本文件,如下所示:

doe,john
smith,mike
...

我声明了以下变量:

fname=$(cut -d, -f2 "file.txt" | cut -c1)
lname=$(cut -d, -f1 "file.txt")

但是如何将元素组合在一起形成名称 jdoe msmith ?我尝试了我知道的连接字符串和变量的方法,但没有任何作用..

我想我找到了一个使用 awk 的方法,但是有没有其他方法来“连接”2个列表的元素? 谢谢

3 个答案:

答案 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的值,只需将两个变量引用放在一起。
  • $first是一个输入重定向,通过stdin将0的内容发送到< file.txt循环。