从文件中读取每行输入并分配给变量

时间:2014-09-23 20:27:43

标签: bash shell

我试图从文件中读取每一行输入,取一个特定的单词(用分隔符分隔)并将其分配给变量。

cat Number
Number11,Number21,Number31
Number12,Number22,Number32
Number13,Number23,Number33

我使用了以下代码:

while
read LINE
do
var1=$(echo $LINE|awk -F, '{ print $1 }')
echo $var1
done < Number|awk -F\, '{ print $1 "," $2 }'|head -2

我希望输出为:

Number11
Number12
Number13

但我得到了输出:

Number11,
Number12,
Number13,

我收到逗号(,),这不是必需的。有人可以纠正我。

4 个答案:

答案 0 :(得分:3)

多次回答......

while IFS=, read -r n1 n2 n3
do
    #echo "=n1:$n1= =n2:$n2= =n3:$n3="
    echo "$n1"
done < Number
  • 它将IFS(输入字段分隔符)设置为逗号
  • 逐行阅读文件
  • 将字段(由IFS分割)分配到read的参数
  • 中的变量

打印:

Number11
Number12
Number13

答案 1 :(得分:2)

#!/bin/bash
#read the lines as array with delemiter as ','
while IFS=',' read -a line
do
  # echo the index zero of the array
  echo "${line[0]}"
done < Number

答案 2 :(得分:0)

cut对于这种情况也很有用:

while read LINE; do 
   var1=$(cut -d ',' -f 1 <<< $LINE)
   echo $var1
done < Number

输出:

Number11
Number12
Number13

答案 3 :(得分:0)

尝试以下awk命令:

awk -F"," '{print $1}' Number

这避免了不必要的循环逐行读取文件,因为awk无论如何都会逐行解析文件。 awk的-F选项用于指定分隔符。

由于您希望它在变量中,请尝试:

for each in `awk -F"," '{print $1}' Number`
do
   echo $each
done