读取文件并将每一行拆分为多个变量

Fat*_*rie 1 linux variables bash shell

我有一个包含文本的文件,如下所示:

471_068 0
AALIAN  1
ASHLEY-U    95
CATRIONA_W  97
STESSY K    08
Run Code Online (Sandbox Code Playgroud)

此数据与项目“名称”相关,它是“颜色 ID”,
我需要将名称与 ID 分开并将它们放在单独的变量中。


请注意,使用小于 10 的数字时的 ID 都可以有前导 0 或没有前导,因此我需要在它们出现时对其进行解析(04 需要保留 04,1 需要保留 1 而不是 4 或 01 )

名称中可以包含下划线 (_)、连字符 (-) 或空格 ( ),这些也需要保留。

这是我读取文件的内容,它在循环中逐行读取文件,这很棒,但我不知道如何正确分离我想要的变量。

while read fLine
do
  PRDT=$(echo $fLine | tr '\t' '\n')
  echo First Var is ${PRDT[0]} - Second Var is ${PRDT[1]}
done < Products
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 5

read可以自己做。请参阅BashFAQ #1

while IFS=$'\t' read -r key value; do
  echo "First Var is $key - Remaining Line Contents Are $value"
done
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想丢弃第二列之后的任何内容(而不是将该内容附加到该值),则应改为:

while IFS=$'\t' read -r key value _; do
  echo "First Var is $key - Second Var is $value"
done
Run Code Online (Sandbox Code Playgroud)

如果您想以能够按名称查找的方式存储 ID,则关联数组(在 bash 4.0 中添加)是正确的工具:

declare -A color_ids=( )
while IFS=$'\t' read -r key value; do
  color_ids[$key]=$value
done

for name in "${!color_ids[@]}"; do
  value=${color_ids[$name]}
  echo "Stored name $name with value $value"
done
Run Code Online (Sandbox Code Playgroud)