我正在尝试从一个文本文件中读取格式,例如(您有一个关键字列和关联的键值):
橘子12
榴莲果5apple 3.5
使用读取功能,我可以将它们作为列读取,但前提是每列基本上都是一个单词。在如上所述的示例情况中,我不确定该怎么做,因为第二个条目是两个单词,但我想将它存储为一个单词。
答案 0 :(得分:2)
您应该使用空格以外的其他内容来将名称与计数分开,例如标签。然后你可以使用
while IFS=$'\t' read -r fruit count; do
echo "Fruit: $fruit"
echo "Count: $count"
done < data.txt
如果无法进行更改,则可以将每行读入数组并重新加入第一组列。但是,这将失去任何特定的空白区域。
while read -a data; do
fruit=${data[*]:0:${#data[@]}-1}
count=${data[@]:${#data[@]}-1}
done < data.txt
无论哪种方式,您都可以在循环内构建水果名称和计数数组。
while ...; do
fruits+=("$fruit")
counts+=("$count")
done << ...
for ((i=0; i<${#fruits[@]}; i++)); do
echo "Fruit #$i: there are ${counts[i]} ${fruits[i]}(s)"
done
答案 1 :(得分:1)
使用正则表达式:
while read -r line; do
[[ $line =~ ^(.*)\ (.*)$ ]] && echo "${BASH_REMATCH[1]}|${BASH_REMATCH[2]}"
done < file
输出:
tangerine|12 durian fruit|5 apple|3.5
${BASH_REMATCH[1]}
包含第一列和${BASH_REMATCH[2]}
第二列。