Lal*_*ala 0 powershell batch-file
我有一个.txt像下面这样的:
MasterCard
R$ 66,12
Hipercard
R$ 7.501,98
MasterCard
R$ 48,19
Hipercard
R$ 7.742,46
MasterCard
R$ 48,19
Hipercard
R$ 5.846,14
MasterCard
R$ 48,19
Hipercard
R$ 4.210,65
Visa
R$ 4.210,65
MasterCard
R$ 48,19
Hipercard
R$ 2.892,20
MasterCard
R$ 48,19
Visa
R$ 4.210,65
Hipercard
R$ 1.944,19
Hipercard
R$ 584,04
Visa
R$ 4.210,65
Run Code Online (Sandbox Code Playgroud)
我需要一个.bat文件(可能在 PowerShell 中)按描述和值组织行,如下所示:
-----------------
MasterCard
R$ 66,12
MasterCard
R$ 48,19
MasterCard
R$ 48,19
MasterCard
R$ 48,19
MasterCard
R$ 48,19
MasterCard
R$ 48,19
----------------
Hipercard
R$ 7.501,98
Hipercard
R$ 7.742,46
Hipercard
R$ 5.846,14
Hipercard
R$ 4.210,65
Hipercard
R$ 2.892,20
Hipercard
R$ 1.944,19
Hipercard
R$ 584,04
--------------
Visa
R$ 4.210,65
Visa
R$ 4.210,65
Visa
R$ 4.210,65
Run Code Online (Sandbox Code Playgroud)
可以用.bat文件来做吗?我被困在如何开始。我正在尝试使用一个简单的命令:sort test.txt /o testout.txt
但它不起作用。
我有另一个想法。运行此命令,我可以将所有行放在同一行中:
for /f "usebackq tokens=* delims=" %%a in ("frt01.txt") do (echo(%%a)>>test.txt
for /f "usebackqdelims=" %%i in ("test.txt") do @<nul set /p"=%%i ">>"test2.txt"
del test.txt /S /Q /
Run Code Online (Sandbox Code Playgroud)
所以现在,描述和值都在一行中:
MasterCard R$ 66,12 Hipercard R$ 7.501,98 MasterCard R$ 48,19 Hipercard R$ 7.742,46 MasterCard R$ 48,19 Hipercard R$ 5.846,14 MasterCard R$ 48,19 Hipercard R$ 4.210,65 MasterCard R$ 48,19 Hipercard R$ 2.892,20 MasterCard R$ 48,19 Hipercard R$ 1.944,19 Hipercard R$ 584,04
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能像波纹管一样?(在每个值后键入“输入”)
MasterCard R$ 66,12
Hipercard R$ 7.501,98
MasterCard R$ 48,19
Hipercard R$ 7.742,46
MasterCard R$ 48,19
Hipercard R$ 5.846,14
MasterCard R$ 48,19
Hipercard R$ 4.210,65
MasterCard R$ 48,19
Hipercard R$ 2.892,20
MasterCard R$ 48,19
Hipercard R$ 1.944,19
Hipercard R$ 584,04
Run Code Online (Sandbox Code Playgroud)
因为那样我可以用这个命令排序: sort test2.txt /o output.txt
我想通过这种方式做更容易。
@michael_heath 这就是我所说的:
Hipercard R$ 584,04
Hipercard R$ 1.944,19
Hipercard R$ 2.892,20
Hipercard R$ 4.210,65
Hipercard R$ 5.846,14
Hipercard R$ 7.501,98
Hipercard R$ 7.742,46
------------------------
MasterCard R$ 48,19
MasterCard R$ 48,19
MasterCard R$ 48,19
MasterCard R$ 48,19
MasterCard R$ 48,19
MasterCard R$ 66,12
------------------------
Visa R$ 48,19
Visa R$ 48,19
Visa R$ 48,19
------------------------
Run Code Online (Sandbox Code Playgroud)
在对数据进行排序之前,您需要对其进行解析。您可以使用带有模板的ConvertFrom-Stringcmdlet来执行此操作:
$Template = @'
{CardProvider*:MasterCard}
R$ {Amount:66,12}
{CardProvider*:Hipercard}
R$ {Amount:7.501,98}
{CardProvider*:Visa}
R$ {Amount:4.210,65}
'@
$Transactions = Get-Content path\to\file.txt |ConvertFrom-String -TemplateContent $Template
Run Code Online (Sandbox Code Playgroud)
该$Transactions变量现在将包含一个对象数组,每个对象都有一个CardProvider和一个Amount属性。要按提供商然后按数量排序,我们可以执行以下操作:
# Define output file name
$OutputFile = 'output.txt'
# Group by card type first
$Transactions |Group-Object CardProvider |ForEach-Object {
# Write seperator to output file:
'----------------' |Add-Content -Path $OutputFile
# Now we sort each group of cards by descending amount
$_.Group |Sort-Object {$_.Amount -replace '\.' -replace ',','.' -as [decimal]} -Descending |ForEach-Object {
# Finally write the contents to file again
$_.CardProvider,"R$ $($_.Amount)","" |Add-Content -Path $OutputFile
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2016 次 |
| 最近记录: |