草庐IT

《nushell一将功成,万awk骨枯》---对比nushell和powershell(第二集)

PowerShell免费软件 2023-03-28 原文

  2022-10-05 nushell版本=v0.69.1

Nushell powershell awk 对比 第二集 博客园

 

第一章 对比awk,nushell,powershell的安装

1 nushell是mit协议的,rust开发的,【单文件程序!!!】,所以nushell的安装真香!

2 从这点上来看awk完败。Awk文件太多不绿色。Awk就占个内置的先机。

3 powershell是绿色软件,从github下载后,解压便可执行,但它是单目录中,有多个文件和子目录。这比awk安装在多个不同的子目录要好。我还为大家做了linux一键安装powershell的脚本。

安装脚本在码云,Linux下一键安装powershell:

https://gitee.com/chuanjiao10/kasini3000_agent_linux

结论:nushell和powershell都是绿色linux软件。

 

第二章 对比nushell,powershell的功能

1 nushell

关于nushell的扩展性,目前我还是不看好。和powershell对比还是不行。

不建议powershell人学习nushell,因为学了之后,你会从西施变成东施。Nushell中没有对象,也就没有属性,方法。但有模仿的似是而非的东西,而且模仿的痕迹还特别大。比如:

Powershell:

‘abc’.toupper()

Nutshell:

‘abc’ | str upcase

Ls | where size > 5mb | sort-by name

 

关于nushell的适用场景:

awk最大的竞争对手,敌人,就是nushell。它可以代替awk,sed,可以支持表,json,xml,bson,sqlite等,支持多线程并发,支持特别老的linux,和unix。它们的战场(对比场景),就是常见的【linux本地不规范数据处理】

世界上90%的人,都用linux的默认shell,如bash,ash等。只有不到5%的linux人把默认shell替换成了powershell。用nushell当默认shell的人就更少了。也就是说,几乎没人拿nushell当shell用,而拿nushell当awk用。用nushell来处理数据,扣取字串,分行分列,发送接收json等。

 

2 powershell:Win,linux中,最强大的还属powershell。

Powershell的强大,主要通过4点:

  1. net。powershell基于.net,powershell目录文件中,90%以上是.net文件。Powershell用的是.net对象,属性,方法。
  2. 通过从nuget下载的.net的dll文件,给powershell各种扩展。这些扩展是跨平台即win,linux通用的。如:在win、linux中支持各种数据库。
  3. 强大联盟。微软在win10,win11,winserver,linux,azure。亚马逊在aws云,vmware在powercli中使用powershell。
  4. 我开发的kasini3000,这是一个开源,免费,跨平台的,脚本级别的批量运维工具。而ansible是yaml级别的。可以通过【kasini3000】同时控制多个云。同时控制公有云,私有云。同时控制win,linux被控机。

Powershell和Kasini3000中有个功能,就是基于powershell的new-psssession的双向远程传对象。请看:

$时间对象_从被控机传到主控机 = k_run_ip -ip 被控机ip地址 {get-date}
$时间对象_从被控机传到主控机.addday(3) #被控机时间 + 3天

powershell管道传对象被你nushell无情地山z寨了。我想看看powershell的远程传对象,你怎么山z寨。

 

 

第三章 接续第一集,继续探究nushell的功能。

 

关于官方的,把nushell看成编译脚本:

这一个特性真的不好。Powershell没有这个特性。

 

nushell第一集中的问题:可以定义带有点的变量,却无法使用,什么鬼?如:let a.a = 1 ,用$a.a  ${a.a} 不能输出。------已经修复,现在不能定义上述变量。

 

 

nushell第一集中的问题:在win的nushell中,的文件名补全。可以补全目录名(支持),目录中的文件名,有时候不能自动补全。文件名补全,打一个字母后,不能补全,这个应该是个bug。------已经修复

nutshell中,这一个特性很好:

let if = 1 ,let 1 = ‘a’ ,都可以定义。并使用$if,$1。这和powershell相同。Python中不允许这么用,而脚本人喜欢用 $1  ,  $2。

 

nushell第2集发现的新问题:

管道可以和powershell联用,但有问题:

pwsh.exe -c "echo a" | str upcase

 

A

----上述好多空格

echo 'a' | str upcase

A  ----正常

 

ls | autoview  ---不灵了,应该是autoview命令删除了

$it ---不灵了,没了。

这个命令可以:

'aaa 分割符 bbb' | parse '{a1} 分割符 {a2}' | get a1

这个命令不行:让我感到难受

'aaa 分割符 bbb' | parse '{1} 分割符 {2}' | get 1    #不行

'aaa 分割符 bbb' | parse '{$1} 分割符 {$2}' | get $1  #不行

 

 

 

 

结论:

Python败在没有shell级别的命令行,py脚本内支持管道很麻烦。不建议使用。

而powershell是最简单,功能最强的。它语法和shell 95%相同。库随不如py强,但对脚本,运维人员来讲人足够了。

awk是一个传统的【字符串级别】shell语言工具。Awk是shell的架海紫金梁。既然是【字符串级别】工具,那就免不了依赖正则。

nushell是一个【半面向对象级别】的shell工具。是通天灵宝的仿a制b品(寨c版)。Nushell通过伪对象,伪属性,伪方法来实现功能。nushell有管道,而python可以看做没有管道。它支持sql库=sqlite,nosql库=bson,用起来比py简单,它支持linux外部命令。Nushell是单文件绿色软件,这点让它真香!nushell目前最大的对手是awk。但nushell扩展性不如powershell,python。

Shell工具本来是小众软件。前有【饭醉团dd伙3人组awk-sed-grep】,后有强大的【powershell抽喝烫】。nushell浑身都是假%z货(伪对象,伪属性,伪方法),nushell能杀出重围吗?敬请期待第3集。

 

欢迎awk支持者,参与讨论。意见不同也很正常。

Shell用户受困于awk,这导致excel文件=库,mysql库,sqlite库,bson=nosql库,不能方便地被shell用户使用。Awk和txt又不方便多核cpu。而nushell的出现,部分解决了这种问题。

 

 

 

对比nushell和powershell(第一集)

https://www.cnblogs.com/piapia/p/15016149.html

 

有关《nushell一将功成,万awk骨枯》---对比nushell和powershell(第二集)的更多相关文章

  1. ruby - 如何跳过 CSV 文件的第一行并将第二行作为标题 - 2

    有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|

  2. STM32的HAL和LL库区别和性能对比 - 2

    LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L

  3. ruby - `respond_to_missing?` 的第二个参数有什么用吗? - 2

    使用method_missing时在Ruby中,它是almostalwaysagoodidea定义respond_to_missing?respond_to_missing?接受两个参数;我们正在检查的方法的名称(symbol),以及一个指示我们是否应该在检查中包含私有(private)方法的bool值(include_all)。现在我感到困惑的是:method_missing不接受任何可能指示它是否应该调用私有(private)方法的参数,如respond_to_missing?做。此外,method_missing无论原始方法调用是在公共(public)上下文还是私有(privat

  4. ruby - stub 实例方法在使用 minitest 的第二次调用时返回值不同 - 2

    我正在对用户的提要进行分页,并想模拟我正在使用的API的响应。API可以返回奇怪的结果,所以我想确保如果API返回我已经看到的项目,请停止分页。我使用minitest在第一次调用方法get_next_page时stub,但我想在第二次和第三次用不同的值调用它时stub。我应该只使用rSpec吗?ruby新手...这是片段test"crawlerdoesnotpaginateifnonewitemsinnextpage"do#1:A,B#2:B,D=>D#3:A=>stopcrawler=CrawlJob.newfirst_page=[{"id"=>"item-A"},{"id"=>"i

  5. ruby-on-rails - Ruby:给定日期找到下一个第二或第四个星期二 - 2

    我似乎找不到一种优雅的方式来做到这一点......给定一个日期,我如何找到下一个星期二,即日历月的第2个或第4个星期二?例如:给定2012-10-19然后返回2012-10-23或给定2012-10-31然后返回2012-11-13OctoberNovemberSuMoTuWeThFrSaSuMoTuWeThFrSa12345612378910111213456789101415161718192011121314151617212223242526271819202122232428293031252627282930 最佳答案

  6. ruby - 为什么触发器运算符包含第二个条件? - 2

    以下代码使用了触发器运算符。(1..10).each{|x|print"#{x},"ifx==3..x==5}为什么结果是3,4,5?我觉得应该是3,4。如教程中所述,此表达式在x==3时为真,并一直为真,直到x==5。如果“5”的计算结果为false,如何打印它?谁能为我澄清一下? 最佳答案 来自“TheRubyProgrammingLanguage”的重要链接是:4.6.9.1Booleanflip-flopsWhenthe..and...operatorsareusedinaconditional,suchasanifstat

  7. ruby array,从第二个到最后一个获取所有元素 - 2

    这个问题在这里已经有了答案:HowtoreturnapartofanarrayinRuby?(6个答案)关闭8年前。我的方法:defscroll_imagesimages_all[1..images_all.length]end我不喜欢调用images_all两次,只是想知道是否有一个好的技巧来调用self或类似的东西来使它更干净一些。

  8. ruby - 如何使用每个元素从第二个元素开始在数组中循环? - ruby - 2

    假设我有一个这样的数组:["auburn","http://auburn.craigslist.org/web/","http://auburn.craigslist.org/cpg/","http://auburn.craigslist.org/eng/","http://auburn.craigslist.org/sof/","http://auburn.craigslist.org/sad/"]我想做的是只处理这个数组中的URL——它总是从element[1]开始并向上。我该怎么做? 最佳答案 这里只显示从1(第二个元素)开始

  9. ruby-on-rails - Ruby DateTime 格式 : How can I get 1st, 第二、第三、第四? - 2

    首先,DateTime格式变量似乎没有在任何地方记录,因此对可以在rubydocs中向我展示此内容的任何人+1。其次,在查看Date.strftime函数代码时,我没有看到任何可以让我执行以下操作的内容:2010年9月9日,星期四有人知道这是否可行吗? 最佳答案 您可能想要takealookhere.总结time=DateTime.nowtime.strftime("%A,%B#{time.day.ordinalize}%Y")请注意,您在纯Ruby(2.0)中运行,您需要调用:require'active_support/core

  10. ruby - 从第二次出现的字符拆分字符串 - 2

    如何从第二次出现的字符拆分字符串str="20050451100_9253629709-2-2"Ineedtheoutput["20110504151100_9253629709-2","2"] 最佳答案 没有什么比得上单线了:)str.reverse.split('-',2).collect(&:reverse).reverse它将反转字符串,用“-”分割一次,从而返回2个元素(第一个“-”前面的内容和它后面的所有内容),然后反转两个元素,然后反转数组本身。编辑*before,after=str.split('-')puts[be

随机推荐