将文本文件中的单词列表拆分为 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