从文本文件编写用户名创建脚本?
Scripting username creation from text file?
我在 Bash 和一般的脚本方面真的很新。
我必须创建由名字的第一个字母和姓氏组成的用户名。为此,我使用提供的文本文件,如下所示:
doe,john
smith,mike
...
我声明了以下变量:
fname=$(cut -d, -f2 "file.txt" | cut -c1)
lname=$(cut -d, -f1 "file.txt")
但是如何将这些元素放在一起形成名称 jdoe 和 msmith ?我尝试了我知道的连接字符串和变量的方法,但没有任何效果..
我想我找到了一个使用 awk 的方法应该有效,但是还有其他方法可以 "concatenate" 2 个列表的元素吗?
谢谢
有一百万种方法,这是最简单的:
$ awk -F, '{print substr(,1,1) }' file
jdoe
msmith
这看起来有点像家庭作业,所以我会给出一些提示。
要将文件的每一行的姓氏和名字读入单独的变量,请参阅 BashFAQ 1。它不应该涉及 cut
.
要获取变量的第一个字符,请参阅 BashFAQ 100。
是最简单的(可能也是最快的),但由于您要求不同的解决方案:
#!/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 _
从每个输入行读取前 2 个 ,
分隔的字段(_
是一个虚拟变量,它接收输入行的其余部分,如果有的话;-r
阻止解释输入中的 \
个字符,这通常是您想要的)。
username=${first:0:1}${last}
连接第一个字符。变量 $first
的值与变量 $last
的值的组合,只需将两个变量引用并排放置即可。
${first:0:1}
- 从 $first
位置 0
中提取 1
字符 - 是 parameter expansion, specifically: substring expansion 的一个例子
< file.txt
是一种输入重定向,它通过标准输入将 file.txt
的内容发送到 while
循环。
我在 Bash 和一般的脚本方面真的很新。 我必须创建由名字的第一个字母和姓氏组成的用户名。为此,我使用提供的文本文件,如下所示:
doe,john
smith,mike
...
我声明了以下变量:
fname=$(cut -d, -f2 "file.txt" | cut -c1)
lname=$(cut -d, -f1 "file.txt")
但是如何将这些元素放在一起形成名称 jdoe 和 msmith ?我尝试了我知道的连接字符串和变量的方法,但没有任何效果..
我想我找到了一个使用 awk 的方法应该有效,但是还有其他方法可以 "concatenate" 2 个列表的元素吗? 谢谢
有一百万种方法,这是最简单的:
$ awk -F, '{print substr(,1,1) }' file
jdoe
msmith
这看起来有点像家庭作业,所以我会给出一些提示。
要将文件的每一行的姓氏和名字读入单独的变量,请参阅 BashFAQ 1。它不应该涉及 cut
.
要获取变量的第一个字符,请参阅 BashFAQ 100。
#!/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 _
从每个输入行读取前 2 个,
分隔的字段(_
是一个虚拟变量,它接收输入行的其余部分,如果有的话;-r
阻止解释输入中的\
个字符,这通常是您想要的)。username=${first:0:1}${last}
连接第一个字符。变量$first
的值与变量$last
的值的组合,只需将两个变量引用并排放置即可。${first:0:1}
- 从$first
位置0
中提取1
字符 - 是 parameter expansion, specifically: substring expansion 的一个例子
< file.txt
是一种输入重定向,它通过标准输入将file.txt
的内容发送到while
循环。