我的任务是用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;
}
答案 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"