如何在bash中重写powershell代码

时间:2010-08-26 15:50:47

标签: bash powershell

我的任务是用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 个答案:

答案 0 :(得分:3)

也许一点点重构会有所帮助:

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; 
} 

答案 1 :(得分:0)

你在'|'上划一条线charater到数组行。看起来你使用$ row数组作为$ ops var的某种键。第一个if测试,看看对象是否存在,如果不存在,则在$操作中创建第二个和第三个ifs测试,以查看$ row中的第5个元素是否为零,并且增加或减少在首先是。

答案 2 :(得分:0)

约:

#!/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"