将文本文件中的单词列表拆分为 BASH 中的数组
Splitting a list of words from a text file into an array in BASH
过去一个小时左右,我一直在为此苦苦挣扎,我正在尝试将一个包含名称的文本文件放入这些单词的数组中。
文本文件格式:
Word1~~Word2
Word1~~Word2
..
最后我想把这些单词分成 word1 和 word2 的 2 个数组,在“~~”处断开,但这是以后的问题
现在我(目前)有这个:
#!/bin/bash
a=$(cat ~/words.txt)
c=0
for word in $a
do
arrayone[$c]=(echo $word)
c=$((c+1))
done
我已经尝试了很多其他方法,但要么都不起作用,要么在执行时出错,我在 BASH 方面相对较新,并且语法非常困难
感谢您的宝贵时间
现在解决您的 "later" 问题实际上同样容易。除非你需要能够处理带有(不成对的)文字 ~
个字符的单词,否则这样做:
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
过去一个小时左右,我一直在为此苦苦挣扎,我正在尝试将一个包含名称的文本文件放入这些单词的数组中。
文本文件格式:
Word1~~Word2
Word1~~Word2
.. 最后我想把这些单词分成 word1 和 word2 的 2 个数组,在“~~”处断开,但这是以后的问题
现在我(目前)有这个:
#!/bin/bash
a=$(cat ~/words.txt)
c=0
for word in $a
do
arrayone[$c]=(echo $word)
c=$((c+1))
done
我已经尝试了很多其他方法,但要么都不起作用,要么在执行时出错,我在 BASH 方面相对较新,并且语法非常困难
感谢您的宝贵时间
现在解决您的 "later" 问题实际上同样容易。除非你需要能够处理带有(不成对的)文字 ~
个字符的单词,否则这样做:
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