将文本文件中的单词列表拆分为BASH中的数组

时间:2015-07-24 16:04:01

标签: arrays bash shell scripting

在过去一小时左右的时间里,我一直在与此作斗争,我试图将一个充满名字的文本文件放到这些单词的数组中。

文本文件已格式化:

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相对较新,而且语法极度困难

感谢您的时间

1 个答案:

答案 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