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

[原创]使用PowerShell来完成像awk一样对多个文件的筛选(二) 作者: Edengundam(马涛)本篇文章引用的小例子来自如下链接:http://bbs.chinaunix.net/viewthread.php?tid=577044&extra=page%3D1%26amp%3Bfilter%3Ddigest 上次只完成了1,2两个例子. 今天我将给出使用之前编写函数awk 来完成3,5,6三个例子的代码. 通过使用函数awk, 阅读详情
作者: Edengundam(马涛)
本篇文章引用的小例子来自如下链接:
 
又是一篇重量级的精华帖, 主要讲解了awk在shell中的重要作用. 编写本篇例子, 费了我很长时间, 一开始我就使用awk的思路, 试图利用PowerShell完成. 写完后, 依然还是模仿awk的风格, 并且整个代码更加冗长, 我沉思半晌, 终于领悟到了一个关键性的问题. 正如, PowerShell团队leader所说: "Unix世界文件, 大都是字符串, 因此在Unix环境下, 针对文本的处理工具譬如: 'awk, sed, join, paste, uniq, sort 和column'等等都异常强大." 在Windows的环境中, 所有信息被抽象, 因此, PowerShell 的特性也就必须进行一定的扩展, 才能更好的适应文本操作. 下面对于每种问题, 我都会给出相应的代码, 这里用到了很多很多PowerShell中的知识, 如果想真正看懂, 需要把基本功大扎实. 基本功越好, 你就一定遇到更少的障碍.
 
1. 用某一文件的一个域替换另一个文件中的的特定域
 

PS C:/PowerShell/test1> gc passwd s2002408030068:x:527:527::/home/dz02/s2002408030068:/bin/pw s2002408032819:x:528:528::/home/dz02/s2002408032819:/bin/pw s2002408032823:x:529:529::/home/dz02/s2002408032823:/bin/pw

 

PS C:/PowerShell/test1> gc shadow

s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:12676:0:99999:7::: s2002408032819:$1$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:12676:0:99999:7::: s2002408032823:$1$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:12676:0:99999:7:::

我们希望用shadow中第二个域中的字符串替换passwd中的第二个域的'x'. 代码示例如下:

PS C:/PowerShell/test1> gc shadow | %{ $hash = @{} } { $key,$value = $_.trim().split(':')[0,1]; $hash.$key = $value }

我们初始化了一个名称为hash的HashTable, 接下来用了一个perl的多值赋值语句将我们需要信息用数组slice技巧赋值, 最后添加到hash中. 貌似分割太复杂了, sigh...接下来,我们还要将这些数据与passwd中的信息进行合并.

PS C:/PowerShell/test1> switch -f passwd { { $_ -notmatch '^/s*$' } { $ofs = ":"; $input = $_.split(':'); $input[1] = $hash[$input[0]]; "$input" } } s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:527:527::/home/dz02/s2002408030068:/bin/pw s2002408032819:$1$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:528:528::/home/dz02/s2002408032819:/bin/pw s2002408032823:$1$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:529:529::/home/dz02/s2002408032823:/bin/pw

完成任务, 不过我确实用了很多代码, 看起来很复杂. 这里我特意使用了强大的switch来操作文件, 分支条件也使用了表达式.

写到这里, 我觉得很郁闷, 如果我们能获得awk默认的特性, 设置一些默认的变量, 那么我就会更加简单了.

***********************************

我最终决定, 扩展自己的哦PowerShell, 完成一些令人crazy的事情. 让PowerShell具有awk的能力. 以下代码绝对原创:

***********************************

filter awk ([scriptblock] $cmd = $args[0], [regex] $delimiter='/s+')

{

$line = @();

$nf = 0;

$line = @($delimiter.split($_.Trim()));

$nf = $line.length;

$0 = $_;

for ($i = 1; $i -le $nf; $i++)

{

Invoke-Expression "`$$i = '$($line[$i - 1])'"

}

& $cmd

}

好了, 虽然他还不能算得上好使, 但是一般工作都可以完成了. 下面我们测试一下他. 目前他只能支持从管道读取数据.

2. 连接两个文件, 连接属性是某个域上的字串

我们先看下输入数据:

PS C:/PowerShell/test2> gc file1

0011AAA 200.00 20050321

0012BBB 300.00 20050621

0013DDD 400.00 20050622

0014FFF 500.00 20050401

PS C:/PowerShell/test2> gc file2

I0011 11111

I0012 22222

I0014 55555

I0013 66666

我们需要根据file1中第一个域上前4个字符和file2上第一个域的2到5个字符进行比较. 将file2第二个域的数据连接到file1上. 我们来测试下awk的功能吧:

PS C:/PowerShell/test2> $hash = @{}

PS C:/PowerShell/test2> gc file2 | awk -cmd {$hash[$1.substring(1,4)] = $2}

PS C:/PowerShell/test2> gc file1 | awk -cmd { "$0 $($hash[$1.substring(0,4)])" }

0011AAA 200.00 20050321 11111

0012BBB 300.00 20050621 22222

0013DDD 400.00 20050622 66666

0014FFF 500.00 20050401 55555

OK了, 是不是简单了很多呢??

在下一次中, 我将会继续完成3,4题. 希望, 今天的例子足以让你感受到PowerShell的强大. awk 大约花费了我30分钟的时间. 这种扩展带来了更加快速的处理效率.

PowerShell与ISE核心区别解析:从命令行到集成开发环境 在Windows系统管理和自动化领域,命令行工具与集成开发环境(IDE)是两类核心工具。命令行提供直接、高效的交互方式,适合执行单条命令和快速任务;而集成开发环境则通过代码编辑器、调试器和项目管理工具,为复杂脚本开发提供支持。PowerShell作为基于.NET的自动化平台,其对象化管道和模块化设计革新了传统脚本编写方式,大幅提升了代码可维护性和功能扩展性。PowerShell ISE作为微软官方集成脚本环境,提供了语法高亮、图形化调试和多窗格工作区,专门优化脚本开发体验。随着技术演进,Visual Stu 阅读详情

相关推荐

PowerShell攻防实战:从自动化运维到安全对抗的深度解析

在Windows系统管理与自动化领域,命令行工具和脚本语言是实现高效运维的核心技术。PowerShell作为基于.NET框架构建的自动化引擎,其对象管道设计和对系统资源的深度访问能力,使其在自动化脚本编写和系统管理方面展现出独特的技术价值。这种能力不仅提升了运维效率,也使其在攻防对抗中成为关键载体,攻击者常利用其内存执行特性和丰富的系统交互功能进行隐蔽渗透。从应用场景看,无论是日常的批量服务管理、信息收集,还是安全研究中的权限提升与横向移动,深入理解PowerShell的原理与使用技巧都至关重要。本文聚焦P

weixin_30457551的博客 535

powershell awk_Powershell入门指南·一

Powershell入门指南(一)·PowerShell及CLI发展不知各位有没有注意,从Windows 10开始,在开始按钮上右键,菜单里面的CMD不见了,取而代之的是一个叫PowerShell的东西。也许你也曾经打开过它,但是不知道它有什么用; 或者你了解一些CMD命令,但是你发现在这个PowerShell里面有些命令好像不能执行了。 而且这个PowerShell相比CMD启动也不算快,微软为...

weixin_39600400的博客 729

Windows渗透测试:PowerShell信息收集与权限提升实战

在网络安全领域,信息收集是渗透测试和漏洞评估的基础环节,它决定了后续攻击路径的精准度与成功率。其核心原理在于通过系统化枚举,识别目标环境中的配置弱点、软件漏洞和权限设置,从而将原始数据转化为可操作的情报。从技术价值看,高效的信息收集能显著降低攻击噪音,规避防御检测,并提升权限提升(Privilege Escalation)的针对性。在Windows环境中,这一过程尤为关键,因为其复杂的权限模型和丰富的管理接口提供了大量攻击面。应用场景广泛覆盖从红队演练、渗透测试到OSCP等实操认证。本文聚焦于利用Power

weixin_30292843的博客 368

powershell Awk

powershell Awk filter awk ([scriptblock] $cmd = $args[0], [regex] $delimiter='\s+'){$line = @($delimiter.split($_.Trim()));$countOfBlock = $line.length;$0 = $_;#input from p...

weixin_30853329的博客 654

揭秘PowerShell:不只是命令行,更是下一代跨平台自动化引擎,DevOps/运维必修课

摘要: PowerShell是微软开发的跨平台自动化工具,兼具命令行Shell和脚本语言功能。其核心创新在于面向对象的管道设计,命令输出为结构化对象而非纯文本,大幅提升数据处理效率和脚本健壮性。2016年开源后支持Windows/Linux/macOS,通过pwsh命令运行。PowerShell命令(Cmdlet)采用"动词-名词"命名规范(如Get-Service),内置Get-Command/Get-Help等工具便于探索。典型应用场景包括:系统管理(服务/进程控制)、DevOps自

wylee的博客 2341

PowerShell Install toolkit 工具安装

GnuWin提供win32版本的GNU工具,或具有类似开源许可的工具。这些端口是本机端口,仅依赖于任何现代32位MS-Windows操作系统提供的库,Windows all。

极致,细节 750

powershell awk_谈谈 PowerShell

万事万物,有始有终。直从萌芽拔,高自毫末始。所谓的 Shell,无非是应用程序与操作系统内核进行交互的一个中间程序而已。我本人玩电脑也有很久一阵子了,最开始接触到的就是Windows 7 操作系统,当时 Windows 7 上市不久,我在那台 20 英寸的液晶显示器上看了很多 PC 的知识。但是我第一次接触Shell,却是在 Linux上。Linux 上最常用的是 Bash,这是一个对于 Bour...

weixin_39562579的博客 1434

PowerShell 基础教程

XP/Server 2003/Vista/Server 2008操作系统的脚本语言。包括 Cmd.exe 、SH、KSH、CSH以及BASH Unix在内的大多数外壳程序的操作方式都是在新的进程中执行命令或实用工具程序,并以文本格式向用户显示结果。多年以来,许多文本处理实用工具程序,如sed、AWK 和 PERL,都已逐渐发展为支持这种交互模式。 这些外壳程序也会提供内置于外壳程序中并在外壳程序处理器中执行的命令,例如KSH 中的 typeset 命令和以及 Cmd.exe 中的 dir 命令。在大多数外壳程序中,由于内置命令数量少,从而导致许多实用工具程序应运而生。 针对这一点,Windows PowerShell 有不同的做法。 ◆Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象; ◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口; ◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用不同的剖析器,这项特点会使你更容易学会每种命令的使用方式。 其中最棒的就是你完全不需要舍弃已使用习惯的工具,你可以继续在 Windows PowerShell 中使用诸如Net、SC 和 Reg.exe 等传统的 Windows 工具。

删除文本指定行:sed/awk/PowerShell/Python与编码避坑

文本文件按行处理是日志清理、数据规整和素材整理中的基础操作。删除指定行看似简单,实际受行号基准、文件编码与换行符影响:sed、awk、grep 按 1 基行号流式匹配,Python、PowerShell 数组索引常为 0 基;UTF-8 BOM、GBK、CRLF 与 LF 差异会造成匹配失败、中文乱码或文件体积翻倍。理解这些原理后,单文件可用命令行快速删除,大文件与批量任务更适合 Python 流式脚本,Windows 环境则可选 PowerShell。应用场景覆盖日志剔除、报表头尾清理、小说推广行过滤、覆

weixin_33937499的博客 344

Android14 RK3576开发板有线网卡静态IP配置全攻略(附数据库修改详解)

本文详细介绍了在Android 14 RK3576开发板上实现有线网卡出厂默认静态IP配置的完整方案。通过深入修改系统源码和SettingsProvider数据库,扩展全局设置字段并注入默认值,确保设备首次启动即自动应用预设的IP地址、子网掩码、网关和DNS,适用于工业控制、数字标牌等批量部署场景,有效提升生产效率。

weixin_29253711的博客 608

从报错到定位:Memtest86 DQ位算法解析与实践指南

本文深入解析了Memtest86内存测试工具报错信息的解读方法,重点介绍了通过地址解析、数据转换、位比对和DQ定位四步算法,精准锁定故障DQ位的实践流程。文章以DDR4和DDR5为例,详细拆解了从十六进制报错到二进制比对的完整步骤,并提供了从单个报错分析到故障模式诊断的进阶指南,帮助用户将抽象的报错信息转化为具体的维修或排查依据。

sre5engineer的博客 486

ls只显示文件名/只显示文件夹名

只显示文件名: ls -l | grep ^[^d] | awk '{print $8}' 只显示文件夹名: ls -l |grep ^d | awk '{print $8}' 或者是 ls -d */

weixin_33991727的博客 5167

ARM Cortex平台NEON指令集优化实战指南

本文为ARM Cortex平台开发者提供了一份全面的NEON指令集优化实战指南。文章从NEON的SIMD架构原理讲起,详细介绍了开发环境搭建、NEON内联函数与自动向量化两种核心编程方法、关键数据类型与指令,并通过图像饱和运算、矩阵乘法等实战案例,深入解析了性能调优技巧与常见避坑指南,旨在帮助开发者充分释放ARM处理器的并行计算潜力。

weixin_29162439的博客 260

深入解析 PowerShell 命令行 和 cmd 命令行 的区别

特性cmd.exe(命令提示符)PowerShell核心哲学处理字符串 (String)处理对象 (Object)主要用途运行旧的.bat脚本、简单的文件操作现代系统管理、自动化、云端(Azure)操作脚本语言批处理 (Batch) - 语法诡异PowerShell (.ps1) - 类似 C# / PHP,非常强大命令dircopyren(有限)Copy-Item(海量)兼容性无法运行 PowerShell 命令可以运行几乎所有的cmd命令你的感受像在用“记事本”写代码。

上善若水 1087

热红外图像小目标检测算法综述

热红外小目标检测算法综述,着重介绍基于深度学习的小目标检测算法

Littro Innovations 4244

机器学习实战26-一种基于LightGBM的股市涨跌预测系统与代码实现过程

在全球经济一体化的背景下,股市作为经济活动的晴雨表,其波动与预测对于投资者、金融机构乃至国家政策制定者而言至关重要。随着金融市场的日益复杂化与信息量的爆炸式增长,股市分析不再仅限于基本面和技术面的传统研究,而是迫切需要更加精准、高效及智能化的方法来捕捉市场动态,以辅助决策制定。模型评估是确保LightGBM股市预测系统准确性和稳定性不可或缺的一环。通过综合运用多种评估指标、科学的验证方法以及深入的性能分析,我们不仅能够全面理解模型的能力和限制,还能为持续优化模型、提升预测准确性奠定坚实基础。

微学AI的博客 2328

PowerShell、Bash和CMD

VSCode终端工具对比:PowerShell vs Bash vs CMD 在VSCode中,三种主流Shell各有特点: CMD:Windows传统命令行,语法简单但功能有限,适合基础操作和旧脚本兼容 PowerShell:面向对象设计,支持.NET库和跨平台,适合系统管理和复杂脚本开发 Bash:Linux原生工具链,擅长文本处理,推荐Git操作和WSL开发 推荐选择: 日常开发首选PowerShell(功能全面) Linux环境用Bash 轻量任务用CMD 配置技巧:通过设置修改默认Shell,或分

学习代码 1279

Juniper SRX PPPoE配置

set interfaces pp0 unit 1 ppp-options chap default-chap-secret 拨号用户名密码。set interfaces pp0 unit 0 ppp-options chap default-chap-secret 拨号密码。set interfaces pp0 unit 0 ppp-options chap local-name 拨号用户名。6号口接运营商进行拨号。

Jian Sun_的博客 751

PowerShell文件操作避坑大全:从单文件复制到递归目录的7种用法

本文为从Linux转向Windows环境的开发者提供PowerShell文件操作避坑指南,重点解析了Copy-Item命令的递归复制用法,并与Linux的cp -rf命令进行对比。文章详细介绍了从单文件复制到递归目录操作的7种核心用法,涵盖路径处理、错误机制、权限保留及跨平台兼容性等关键场景,帮助用户规避常见陷阱,实现高效可靠的文件管理。

4k5l6j7h8的博客 454

uniapp - 详细解决 H5 网页报错 Uncaught Error: Async component timed out after ? ms.(移动端h5页面白屏或加载缓慢失败,超时报错处理)

uni-app,vue3,网页,h5,移动端,手机H5页面,浏览器,报错,uniapp报错,Asynccomponenttimedoutafter,如何解决这个问题,vue3Asynccomponenttimedoutafter,异步组件超时了怎么办,async,详细解决方案,AsyncComponents异步组件,导致页面打不开了,白屏什么也不显示,网页载入非常慢卡顿,vue3网站报错,超时,nuxt3,详细解决方案,浏览器控制台报错,爆红并且页面卡住了,依旧报错,找不到异步组件的报错

🏆 前端领域优质创作者 3780

AI原生应用API编排:如何实现高效的权限管理?

随着GPT-4、Claude 3等大模型的普及,AI原生应用(从设计之初就以AI为核心的应用)正从“概念”走向“落地”。依赖大量外部API的协同工作(如用户身份API→大模型生成API→支付API→存储API)。但随之而来的挑战是:如何在复杂的API调用链中,确保每个环节的权限合规?本文将聚焦这一问题,覆盖API编排的基础逻辑、权限管理的核心机制(如RBAC/ABAC)、实战工具链(如OPA策略引擎),以及常见场景的解决方案。本文将按照“场景引入→核心概念→原理拆解→实战演练→趋势展望”的逻辑展开。

大数据洞察的博客 452

常见Powershell指令和DOS指令

类别语法点 / 符号作用代码示例核心Cmdlet获取系统当前运行的所有进程对象。核心Cmdlet结束一个或多个进程。核心CmdletWrite-Host向控制台打印输出文本,常配合颜色参数美化终端。核心Cmdlet过滤命令,从管道传过来的集合中筛选符合条件的对象。核心Cmdlet格式化输出,将对象以表格的形式展示指定属性。管道与对象(管道符)将左边命令的输出结果(对象),作为右边命令的输入。管道与对象$_当前对象,在的脚本块{ }中代表当前处理的对象。管道与对象(点号)

2501_93608492的博客 329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【详细】CMD、PowerShell 与 Linux Shell 命令的深度对比

在计算机操作系统的命令行界面(CLI)中,Windows 和 Linux 提供了各自独特的工具集:Windows 的传统命令提示符(CMD)、功能强大的 PowerShell,以及 Linux 平台上丰富多样的 Shell(如 Bash、Zsh 等)。这些工具虽然都旨在帮助用户与操作系统交互,但因历史背景、设计哲学和适用场景的差异,展现出截然不同的特性。

vortex5的博客 2241

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

10 分钟跑通 PowerShell 入门:新手最该收藏的实战指南

这个仓库里的 PowerShell 已经不是 Windows 里那个灰色命令窗了——它是 Windows、Linux、macOS 三端通吃的跨平台自动化工具。如果你第一次在服务器上敲 `pwsh` 只得到 "command not found",这篇能带你从装好环境到写出自己的命令,全程约 10 分钟。 ## 🚀 2 条命令装好 PowerShell 7,顺手验证版本 先克隆仓库,再跑仓库自

gitblog_01055的博客 639

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

删除 txt 指定行:sed、awk、Python 与编码避坑

删除文本文档中的指定行,本质上是按行号、内容、正则模式或行状态对文本流做过滤与重写。其原理是先准确定位目标行,再以整行粒度安全删除,同时保留其余内容、编码和换行符不变。掌握 sed、awk、Python 等工具后,这类操作可从手工框选升级为可复用、可批量的文本流水线,显著降低日志清洗、数据去重、配置修改和 txt 批量整理的成本。面对 GBK/UTF-8、CRLF/LF 混用等细节,需先备份、试跑并对账行数,再选择 Notepad++ 标记、PowerShell/findstr 或命令行脚本。围绕 txt

weixin_33782386的博客 174

[ PowerShell 教程] 第1天课后作业答案与指导

本文介绍了PowerShell第1天的课后作业内容及解答。作业1演示了如何通过Get-Process和Where-Object筛选CPU时间超过100秒的进程。作业2指导如何使用Get-Help查询命令帮助,并安全终止记事本进程,包括通过进程名或ID两种方式。作业3探讨了PowerShell面向对象的特性,与CMD/Bash的文本处理方式对比,以及和Python/Java操作对象的异同。关键收获包括掌握对象过滤、自助学习命令和安全进程管理,建立对象流思维。PowerShell通过传递.NET对象简化系统管理

778
上一篇: [原创]用PowerShell实现递归还原变量
下一篇: [原创]使用PowerShell来完成像awk一样对多个文件的筛选(二)
PowerShell
博客等级 码龄19年 103粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值