2017-02-11 3 views
0

мне нужно запрограммировать настольный футбол лиги с футбольный раунд результатов в текстовом файле этого форматаразделить строку на строки и целого Баш

abc 4 def 5 ghi 9 hef 10 

где формат

[home team][home team points][guest team][guest team points] 

И программа будет принимать пять команд и иметь несколько текстовых файлов для чтения. То, что я не знаю, - это то, как получить очки каждой соответствующей команды. Я видел некоторые решения по разбору строки с одним пробелом и разделителем на этом сайте. Тем не менее, мне нужно читать вот так: abc 4def 5 и так далее. Есть ли какие-либо решения?

В данный момент находится код. Я просто выясняю, как читать соответственные оценки команды. Спасибо за вашу любезную помощь.

if [ $# -eq 0 ]; then 
    echo "No argument" 
else 
    echo "The number of arguments : $#" 
    echo "The full list : [email protected]" 
    myArray=("[email protected]") 
    echo "${myArray[0]}" 
    arraylength=${#myArray[@]} 
    declare -p myArray 
    #loop for places entered 
    for ((i=0;i<${arraylength};i++)); 
    do 
    #iterate on the files stored to find target 
    for matchfile in match*.txt; 
     do 
     declare file_content=$(cat "${matchfile}") 
     #check whether a file has target lanaguage 
     if [[ " $file_content " =~ ${myArray[i]} ]] # please note the space before and after the file content 
      then 
       #awk -v a="$file_content" -v b="${myArray[i]}" 'BEGIN{print index(a,b)}' 
       #echo "${myArray[i]}" 
       #let j=j+1 
     echo "${myArray[i]} found in ${matchfile}: with a score ..." 

        fi 
     done 
    done 
    fi 
exit 

ответ

1

Поскольку у вас уже есть регулярное выражение матч происходит с:

if [[ " $file_content " =~ ${myArray[i]} ]]; then 

Вы можете настроить его так:

re="(^|)${myArray[i]} ([0-9]*)(|$)" 
if [[ $file_content =~ $re ]]; then 

В (^|) и (|$) части убедитесь, что он работает, если есть свободное место или начало или конец файла после имени команды. Часть ([0-9]*) должна отображать счет в «группу захвата».

Выполнение этого матча регулярного выражения заполняет массив BASH_REMATCH со всеми совпадениями от сравнения, поэтому ${BASH_REMATCH[2]} будет иметь счет.

+0

вопрос решен. Большое спасибо =] –

Смежные вопросы