2017-02-28 100 views
0

我有一个文本文件,它里面像这样:读取文件并在每行拆分成多个变量

471_068 0 
AALIAN 1 
ASHLEY-U 95 
CATRIONA_W 97 
STESSY K 08 

该数据与一个项目“名称”和它的“颜色ID”
我需要将ID从ID中分离出来,并将它们放在单独的变量中。


作为一个说明,用数字当ID下10既可以有一个前导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 
+0

名称和颜色是通过制表符还是多个空格分开?你有没有考虑过使用awk? – SiKing

+0

我想我忘记提到了,是的,我想要的两个变量由TAB分隔,它们来自TSV文件。 –

回答

3

read可以自己做到这一点。请参阅BashFAQ #1

while IFS=$'\t' read -r key value; do 
    echo "First Var is $key - Remaining Line Contents Are $value" 
done 

注意,如果你要放弃第二列(而不是追加的内容的值)后的任何内容,这将改为:

while IFS=$'\t' read -r key value _; do 
    echo "First Var is $key - Second Var is $value" 
done 

如果你想存储的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 
+0

第一部分完全按照我需要的方式工作,在问这个问题之前,我应该多读一点'''read'''手册页。< –

相关问题