我有一个 ( users.csv
) 文件,其中包含所有员工的 ID 列表。我需要循环遍历此文件以查找每个员工,backup.txt
使用搜索文件中是否存在该grep
员工,并将输出存储在变量 ( user_data
) 中以供打印。
我尝试了echo
的值user_data
,但打印结果为空,为什么user_data
返回结果为空?虽然user_id
确实包含员工 ID,但我认为由于这个循环,它无法正常工作。
我的脚本:
#!/bin/bash
header=true
while IFS=',' read -r user_id; do
if $header; then
header=false
continue
fi
user_data=$(grep "uid=$user_id" disable_Backup.txt)
echo "User is $user_id"
echo "Data is $user_data"
done < users.csv
内容users.csv
:
user_id
x220988
x240755
x260698
内容disable_Backup.txt
:
uid=x220988
inetUserStatus=Active
EmployeeStatus=ACT
uid=x240755
inetUserStatus=Active
EmployeeStatus=ACT
uid=x260698
inetUserStatus=Active
EmployeeStatus=ACT
我需要做什么才能将输出存储到变量grep
中user_data
?
答案1
您的users.csv
文件具有 Windows 样式的行终止符 (CRLF),而您的disable_Backup.txt
文件显然具有 Unix 样式 (LF)。
当您IFS=',' read -r user_id
从 时users.csv
,user_id
变量将包含尾随的 CR 字符 - 因此当您尝试将其与disable_Backup.txt
没有此类字符的行进行匹配时 - 匹配失败。
确保两个文件具有相同的行尾(最简单的方法是使用dos2unix
或unix2dos
),或者在将值传递给 之前去掉回车符grep
:
user_data=$(grep "uid=${user_id%$'\r'}" disable_Backup.txt)