2017-07-07 73 views
0

我们想要完成的任务。有一个源文件(data.csv)与下面的数据引用:Bash脚本 - 从源.csv文件查找一个变量以提供其他

userone,password1 
usertwo,password2 
userthree,password3 

使用源文件中查找用户名,然后逗号作为另一个变量后提供密码。 例

Variables: 
User1=userone 
User1Password=password1 

#!/usr/bin/env bash 
source data.csv 
read data.csv 
If $User1=userone 
    then 
$User1Password=password1 
  • 我们正在使用它来创建一个不同的行代码在Mac上的本地用户帐户,但需要引用.csv文件来获取变量。

在此先感谢您的支持。

回答

1

使用awk

user=userone 
pass=$(awk -F, -v user="$user" '$1 == user { print $2; exit }' data.csv) 

-F,设置字段分隔符逗号。 -v user="user"设置bash变量的变量awk$1$2是CSV的这些字段的内容。

+0

Barmar,感谢您的快速回复。在使用脚本时,$ pass变量在添加echo $ pass时产生“user2”。哪一个是第一列中的下一个行项目。我们想打印同一行的逗号后面的内容,即“password1”。你有另外一个建议吗?我们正在看我们的结局。感谢您让我们走向正确的方向。 – KWSenger

+0

我只是试过了,'echo $ pass'显示'password1'。我不知道为什么它不适合你。 – Barmar

+0

确保'data.csv'不使用CRLF作为其换行符。如果您在Windows上创建了该文件,请使用'dos2unix'将其转换为Unix格式。 – Barmar

0
cat data.csv | \           # piping file contents to the loop 
while read line; do          # reading the input stream line by line 
    username=$(echo $line | awk -F',' '{print $1}')  # username is the 1st string if a , is the delimiter 
    password=$(echo $line | awk -F',' '{print $2}')  # password is the 2nd string if a , is the delimiter 
    echo ${username} ${password}       # test 
done 
+3

这应该是'while IFS =,读取用户名密码;确认echo“$ username”“$ password”;完成。没有管道,没有不必要的'awk'进程。 – chepner

+0

你也可以使用'cut'而不是'awk',这很简单。 – Barmar

相关问题