[原创]PowerShell处理文本文件

[原创]使用PowerShell来完成像awk一样对多个文件的筛选(二) 作者: Edengundam(马涛)本篇文章引用的小例子来自如下链接:http://bbs.chinaunix.net/viewthread.php?tid=577044&extra=page%3D1%26amp%3Bfilter%3Ddigest 上次只完成了1,2两个例子. 今天我将给出使用之前编写函数awk 来完成3,5,6三个例子的代码. 通过使用函数awk, 阅读详情

今天, 我们讨论一个使用正则表达式的问题. 题目源于某论坛, 内容如下:

-----------------------需求-------------------------
原始文件:(编号,姓名,工资)
-------------------------------------------

00014367423811520328285王小勇-109.00
C0024367423811520214121刁晓用-7.25
00034367423811520214071喻大森409.00
10014367423811520212695吕二青234.18
10036227003818620017835王得丹679.49
D0046227003813550029454刘小波767.22
R0054367423811520212943徐小明559.32

希望得到:

1︱4367423811520328285︱王小勇 | 0
2︱4367423811520214121︱刁晓用︱0
3︱4367423811520214071︱喻大森︱409
4︱4367423811520212695︱吕二青︱234.18
5︱6227003818620017835︱王得丹︱679.49
6︱6227003813550029454︱刘小波︱767.22
7︱4367423811520212943︱徐小明︱559.32
合计                   | 2649.21
   
-----------------------------------------------
1) 加入序号
2)用 | 分割各项
3)去掉编号前4个字符
3) 工资项若为负数,变为 0
4)最后将工资为正的,统计相加
 
-----------------------分析-------------------------
 
这种题目显然使用正则表达式是最方便不过的. 首先将源文件保存为salary.txt.
我把这个文件保存在 C:/Documents and Settings/Administrator 目录下, 请大家注意, 尽量避免使用管理员权限.
 
我们要从原始数据中提取出3个信息: 编号, 姓名, 工资项.
它们都有各自固定的特点, 因此我使用下面的正则表达式分别匹配这三项:
^.{4}(?<id>/d+)
(?<name>[/p{IsCJKUnifiedIdeographs}]+)
(?<salary>[/d.]*)
 
匹配名称时候, 我指定了中文, 日文, 韩文的特定集合. /p{IsCJKUnifiedldeographs}. 我想这是整个正则表达式的关键部分.
(?<>re)中, 指定正则表达式分组, <>中间是分组的名称. re是正则表达式.
 
现在, 我给出最后的代码样子:
 
${C:salary.txt} | `
ForEach-Object { $total = 0; $id = 1 } `
{ [void] ($_ -match '^.{4}(?<id>/d+)(?<name>[/p{IsCJKUnifiedIdeographs}]+)(?<salary>[/d.]*)'); `
$ofs = '|'; `
"$($id;$id++;$matches.id;$matches.name;'{0:F2}' -f [float]$matches.salary)"; `
$total += $matches.salary } `
{ "合计`t`t|$total" }
第一行从C:当前工作目录读取文件salary.txt, 然后通过管道, 传递给ForEach-Object命令. 首先我初始化了两个变量$total和$id, 分别用于记录最终的汇总值和每条记录的id号.
接下来正则表达式从输入中将信息分别匹配出来. 这些匹配的分组被保存在$matches哈希表中.
设置输出分隔符为|
拼接输出的信息: id, 员工id, 姓名, 然后用-f运算符指定浮点数的格式.
并将每个salary加到$total中.
最后打印汇总信息.
这里我利用了一个小技巧, 因为题目要求负数等价于0, 因此正则表达式就没有考虑负数的情况. $matches.salary就是$null值. $null值可以在数学运算中转化为数值0, 因此方便了整个脚本的实现.
CVAT自动标注避坑指南:从nuctl安装到YOLOv5模型部署的完整流程 本文详细介绍了在CVAT中部署YOLOv5自动标注功能的完整流程与避坑指南。重点解决了从nuctl工具安装、项目创建时因网络问题导致的镜像拉取失败,到最终模型函数部署与CVAT集成的关键步骤。针对国内网络环境,提供了实用的镜像替换方案,帮助用户顺利完成基于CPU的自动化标注环境搭建。 阅读详情

相关推荐

黑猫带你学eMMC协议第17篇:超详细的eMMC HS200 & HS400讲解

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 本文大约6000字,主要内容有: 1.什么是emmc hs200/hs400? 2.什么是tuning?tuning的过程又是什么? 3.如何设置才能让emmc进入hs200 mode? 4.如何设置才能让emmc进入hs400 mode? 5.emmc关于HS200/HS400内部结构框图对比。 6.部分个人相关经验总结。

黑猫奥利奥的博客 1万+

Powershell实现从注册表获取本地关联文件的扩展名

适用于所有版本。 在先前的技巧中我们知道如何用一行命令获取多行注册表记录,这里,我们再来回顾下这段代码: 代码如下: $lookup = Get-ItemProperty Registry::HKCR\.[a-f]?? |   Select-Object -Property PSChildName, ‘(default)’, ContentType, PerceivedType |   Group-Object -Property PSChildName -AsHashTable -AsString 这次读取了所有HKCR中已点开始、3个字宽、且字母开头是A到F的键值。 另外将结果传递给Gr

海能达PD780 改空口 PDT转DMR 固件 DMR_UPGRADEKIT_SUBSCRIBE_TO_V8.05.07.004

最后一版可以自己PDT转DMR的固件了,配合需要配合V8.05 CPS使用 包含PC38驱动

Powershell语言的数据可视化

PowerShell是一种任务自动化和配置管理的框架,主要由命令行外壳和脚本语言组成。PowerShell不仅能够执行命令,还可以实现复杂的脚本编写,处理文件系统、注册表、系统管理等任务。由于其强大的功能和灵活性,PowerShell在IT管理和数据处理方面得到了广泛应用。PowerShell为数据可视化提供了一个强大的平台,通过调用其他工具和模块,用户能够在PowerShell中灵活地处理数据,并将其可视化展示。

2501_90932931的博客 674

PowerShell 之文本操作

5.08*3.91*0.2 1.90*4.91*0.2 0.63*1.90*0.1 1.49*5.54*0.2 2.30*4.23*0.3 5.18*3.69*0.2 6.23*4.38*0.2 3.61*4.28*0.2 4.57*2.40*0.2 6.70*2.40*0.2 7.28*2.45*0.2 1.90*3.40*0.2 现在有上面这样的一个文本内容, 现在我要做三件事: 1,

日常笔记 8575

Windows PowerShell读取文本文件

示例: [code] i=0 to=3            #iteration number while ( i−le to ) { cd (Get-Content dir.txt)[$i] rm gb.gro ..\dump2gro_2000.exe cd .. $i +=1 } [/code] 尽管对文本文件的需要大概在很久以前就消失了,但是系统管理员仍

Jeffrey Lin的专栏 2万+

powershell 批量转换文本文件编码(GBK转UTF-8,支持多种不同编码的源文件)

powershell 批量转换文本文件编码(GBK转UTF-8)01 前言02 正文03 后记 01 前言 手头有一批SQL文件,通过某程序批量更新到Local DB。但是发现导进去后中文变乱码(一堆????),而且日志里头insert语句中文已经变成乱码,想来应该是编码的问题。一看SQL文件,GBK(系统默认编码)编码,于是想统一改成UTF-8编码。又不想去找各种工具了,直接用Powershel...

HoKis 1万+

cmd 文本文件分割_批处理文本文件分割器 - BAT原创&转载 -处理之家 批处理_BAT脚本_PowerShell_VBS_CMD_DOS_Perl_Python - Powered by...

@echo offsetlocal enabledelayedexpansion:begincolor 31mode con lines=25 cols=60clsecho.echo ╭─────────╮echo |txt文本分割器 |echo ╰─────────╯echo ╔...

weixin_34175919的博客 956

[原创]用PowerShell对字符串处理

作者: Edengundam(马涛)本篇文章引用的小例子来自如下链接:http://bbs.chinaunix.net/viewthread.php?tid=201843&extra=page%3D1 这是一篇很不错的精华文章, 主要讨论了使用expr命令和Bash扩展的一些字符串操作.这里我将会大量使用.Net Framework 2.0 类库 S

Windows PowerShell 1万+

[原创][PowerShell教程][01]初识PowerShell

本Blog所发表的所有"原创文章", 未经许可, 禁止以任何形式进行转载.  作者: Edengundam(马涛) PowerShell的概念性介绍我不太想说得太多, 简单概括几点:   1. 微软Windows操作系统最初的设计目标是面向非技术用户, 甚至是对计算机不感兴趣的人群, 因此, 真正自动化, 强大的Shell一直不是微软公司所关心的问题. 随着Wi

Windows PowerShell 1万+

[原创][PowerShell教程][02]PowerShell基础知识之一

本Blog所发表的所有"原创文章", 未经许可, 禁止以任何形式进行转载.  作者: Edengundam(马涛) 如果要学一门语言, 你就必须对语言的语法, 特性有所了解. 只要对语言的各个环境了解, 才能更好编写, 调式, 部署你的程序. 因此, 教程第二部分将会着重于如下几个方面: 1. PowerShell, Shell, 脚本语言等概念;2.

Windows PowerShell 7038

[原创][PowerShell教程][04]PowerShell面向对象基础之一

本Blog所发表的所有"原创文章", 未经许可, 禁止以任何形式进行转载. 作者: Edengundam(马涛) 面向对象编程的引入主要是为了解决软件复杂化带来的维护等问题,早在20世纪60年代,面向对象就已经出现了。虽然C语言并不支持面向对象的特性,但是使用C语言进行开发的程序人员已经将面向对象的核心思想应用到其中,因此我们更应该理解的是面向对象的思想,而不需要纠缠于语言本身。P

Windows PowerShell 2719

[原创][PowerShell教程][03]PowerShell数据类型之整型

本Blog所发表的所有"原创文章", 未经许可, 禁止以任何形式进行转载. 作者: Edengundam(马涛) [原创][PowerShell教程][03]PowerShell数据类型之整型因为一些原因, 之前的教程之写了两篇, 教程将会从现在继续开始, 并且不会再发生间断, 尽量做到每周能够发两篇. 在02中已经为大家介绍了一些基本概念, 所以从03开始, 将真正接触使用P

Windows PowerShell 4272

[原创]使用PowerShell来完成像awk一样对多个文件的筛选(一)

作者: Edengundam(马涛)本篇文章引用的小例子来自如下链接:http://bbs.chinaunix.net/viewthread.php?tid=577044&extra=page%3D1%26amp%3Bfilter%3Ddigest 又是一篇重量级的精华帖, 主要讲解了awk在shell中的重要作用. 编写本篇例子, 费了我很长时间, 一

Windows PowerShell 6756

PowerShell: 详解Windows10常用的PowerShell高级任务

详解Windows10常用的PowerShell高级任务2018-03-19 10:40 出处:其他 作者:佚名  0   用文声明:本文非原创  Windows PowerShell 是一种命令行外壳程序和脚本环境,在未来时很可能会替换掉命令提示符(CMD)。在Windows10系统中,很多用户对于PowerShell 相对陌生,所以今天小编给大家介绍15 个常用的PowerShell 高级任务...

XDream 1765

power shell-文件读入和写入

power shell 文件读入和写入

ITTIITTI的专栏 5530

Win命令:powershell如何新增并编辑文件

请注意,上述命令中的路径应替换为您要创建或编辑的实际文件路径。此外,某些命令可能需要管理员权限才能在某些目录中创建或编辑文件。请记住,当操作敏感文件或系统文件时要小心,并以管理员权限运行 PowerShell 命令。追加内容:如果您希望追加内容而不是覆盖文件的现有内容,可以使用。如果您希望使用默认程序打开文本文件进行编辑,可以使用。命令来创建一个新文件。例如,要创建一个名为。这将使用默认文本编辑器打开指定的文本文件。命令来编辑文件的内容。

学亮编程手记 4976

[原创][PowerShell教程][06]PowerShell中格式化命令和输出命令

好久不见, 我又食言了, 一直没有更新教程, 我也不想找借口, 因为我花了很多时间跑去玩大蛇无双和魔王再临. 今天, 我将为您介绍如何使用格式化和输出命令. 在PowerShell中,负责进行格式化和输出的是三类cmdlet。他们分别是:Format-*、Out-*和 Write-* 。顾名思义,Format-* 主要是用来对信息进行格式化操作,Out-*用于指定输出设备,而 Write-

Windows PowerShell 4884

windows使用vim编辑文本powershell

windows使用vim编辑文本

gusijin的博客 1806

Powershell-快速编辑模式和标准模式

快速编辑模式和标准模式的切换:控制台——&gt;鼠标右击——&gt;Properties——&gt;EditOptions 标准模式下只能通过鼠标右键选择标记后,进行复制粘贴操作,而快速编辑模式可通过鼠标左键选择任意区域内的文本进行复制,右键粘贴 ...

学习的路上,永不停止 4053

使用powershell-ise读取大文件

打开一个比较大的txt,比如超过500M,正常的话notepad++和windows自带的txt都是没办法进行直接打开的,这个使用需要使用powershell进行打开。按行读取文件(读取前100行)读取整个文件txt文件。

Websec 940
上一篇: Fabnaci 数列
下一篇: SQL Server 2008将自带定制版PowerShell???
PowerShell
博客等级 码龄19年 103粉丝 110原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值