从文件中读取每一行输入并分配给一个变量
问题描述:
我想从文件读取每行输入,取一个特定的单词(用分隔符分隔)并将其分配给一个变量。从文件中读取每一行输入并分配给一个变量
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,
我得到不需要的逗号(,)。有人能纠正我吗?
答
回答很多次......
while IFS=, read -r n1 n2 n3
do
#echo "=n1:$n1= =n2:$n2= =n3:$n3="
echo "$n1"
done < Number
- 它集
IFS
(输入字段分隔符)以逗号 - 读取文件中的行由行
- assing场(分裂by IFS)纳入变量
read
的论点
个打印:
Number11
Number12
Number13
答
#!/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
答
cut
也是这种情况下有用:
while read LINE; do
var1=$(cut -d ',' -f 1 <<< $LINE)
echo $var1
done < Number
输出:
Number11
Number12
Number13
+0
虽然'剪切'工作,没有理由使用它,因为'read'可以执行完全相同的场分裂,而不诉诸外部命令。 – chepner 2014-09-23 21:20:34
+0
诚然,这更多的是个人喜好。虽然这很好理解。 – 2014-09-23 21:24:24
答
尝试下面的awk
命令:
awk -F"," '{print $1}' Number
这可以避免不必要的循环来逐行读取文件,因为awk无论如何都会逐行解析文件。使用awk的-F
选项来指定分隔符。
既然你希望它是一个变量,试试这个:
for each in `awk -F"," '{print $1}' Number`
do
echo $each
done
而且,由于只需要在第一场,'n3'可以作为'n2'变量将吸收剩余字段中删除。 – 2014-09-24 00:17:10