grep 和 awk 命令不返回或存储输出到变量

grep 和 awk 命令不返回或存储输出到变量

我有一个 ( 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

我需要做什么才能将输出存储到变量grepuser_data

答案1

您的users.csv文件具有 Windows 样式的行终止符 (CRLF),而您的disable_Backup.txt文件显然具有 Unix 样式 (LF)。

当您IFS=',' read -r user_id从 时users.csvuser_id变量将包含尾随的 CR 字符 - 因此当您尝试将其与disable_Backup.txt没有此类字符的行进行匹配时 - 匹配失败。

确保两个文件具有相同的行尾(最简单的方法是使用dos2unixunix2dos),或者在将值传递给 之前去掉回车符grep

user_data=$(grep "uid=${user_id%$'\r'}" disable_Backup.txt)

相关内容