Как переписать код powershell в bash - PullRequest
3 голосов
/ 26 августа 2010

Мне было поручено переписать это на bash.Но хотя большинство PowerShell легко читается, я просто не понимаю, что на самом деле делает этот блок !!Есть идеи?

Требуется файл, который сначала отсортирован по ключу, может быть, это актуально!

Спасибо за любые идеи!

foreach ($line in $sfile)
{
  $row = $line.split('|');

  if (-not $ops[$row[1]]) {
    $ops[$row[1]] = 0;
  }

  if ($row[4] -eq '0') {
    $ops[$row[1]]++;
  }

  if ($row[4] -eq '1') {
    $ops[$row[1]]--;
  }

  #write-host $line $ops[$row[1]];

  $prevrow = $row;
}

Ответы [ 3 ]

3 голосов
/ 26 августа 2010

Возможно, небольшой рефакторинг поможет:

foreach ($line in $sfile) 
{ 
  # $row is an array of fields on this line that were separated by '|'
  $row = $line.split('|'); 
  $key = $row[1]
  $interestingCol = $row[4]

  # Initialize $ops entry for key if it doesn't 
  # exist (or if key does exist and the value is 0, $null or $false)
  if (-not $ops[$key]) { 
    $ops[$key] = 0; 
  } 

  if ($interestingCol -eq '0') { 
    $ops[$key]++; 
  } 
  elseif ($interestingCol -eq '1') { 
    $ops[$key]--; 
  } 

  #write-host $line $ops[$key]; 

  # This appears to be dead code - unless it is used later
  $prevrow = $row; 
} 
0 голосов
/ 27 августа 2010

Приблизительно:

#!/bin/bash
saveIFS=$IFS
while read -r line
do
    IFS='|'
    row=($line)

    # I don't know whether this is intended to test for existence or a boolean value
    if [[ ! ${ops[${row[1]}] ]]
    then
        ops[${row[1]}]=0
    fi

    if (( ${row[4]} == 0 ))
    then
        (( ops[${row[1]}]++ ))
    fi


    if (( ${row[4]} == 1 ))
    then
        (( ops[${row[1]}]-- ))
    fi

    # commented out
    # echo "$line ${ops[${row[1]}]}

    prevrow=$row
done < "$sfile"
0 голосов
/ 26 августа 2010

Вы разбиваете строку на '|' характер для строки массива. Похоже, вы используете массив $ row в качестве некоторого типа ключа в переменной $ ops. Первый тест if для проверки, существует ли объект, если он не существует, создает его в $ ops, второй и третий тест ifs, чтобы определить, равен ли ноль 5-й элемент в $ row и равен единице, и увеличивает или уменьшает значение, созданное в сначала если.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...