在过去一小时左右的时间里,我一直在与此作斗争,我试图将一个充满名字的文本文件放到这些单词的数组中。
文本文件已格式化:
Word1~~Word2
Word1~~Word2
.. 最终我想将这些单词拆分为2个数组word1和word2,在" ~~"但这对以后来说是一个问题
现在我(目前)有这个:
#!/bin/bash
a=$(cat ~/words.txt)
c=0
for word in $a
do
arrayone[$c]=(echo $word)
c=$((c+1))
done
我已经尝试了许多其他方法,并且都没有工作或者在执行时出错,我在BASH相对较新,而且语法极度困难
感谢您的时间
答案 0 :(得分:2)
现在解决你的“后期”问题实际上同样容易。除非你需要能够处理带有(未配对的)文字~
字符的单词,否则这样做:
declare -a arr1=() arr2=()
while IFS='~' read -r word1 _ word2; do
arr1+=( "$word1" )
arr2+=( "$word2" )
done <file
printf 'Words in column 1:\n'
printf ' %s\n' "${arr1[@]}"
printf 'Words in column 2:\n'
printf ' %s\n' "${arr2[@]}"
如果你做需要处理更有趣的案例,只处理一个特殊的双重代码,一种方法是使用正则表达式匹配:
while IFS='' read -r line; do
if [[ $line =~ (.*)[~][~](.*) ]]; then
arr1+=( "${BASH_REMATCH[1]}" )
arr2+=( "${BASH_REMATCH[2]}" )
else
printf 'Line does not match pattern: %s\n' "$line" >&2
fi
done <file