){j=sprintf(\"%%03d\",i);print j}}}" 1.txt>2.txt
作者: Five66 时间: 2023-8-29 21:47
回复 5# 思想之翼
啊,不好意思,手抖打错了i<=diend后面那个是英文分号,不是冒号
作者: 思想之翼 时间: 2023-8-29 21:59
回复 6# Five66
经测试,结果不正确。
作者: buyiyang 时间: 2023-8-29 22:19
- gawk "BEGIN{for(i=0;i<=999;i++){num=sprintf(\"%%03d\",i);nums[i]=num}}{for(i=1;i<=NF;i++)a[$i]}END{for(i=0;i<=999;i++){if(!(nums[i] in a))out=out nums[i] \" \"}print out}" 1.txt > 2.txt
复制代码
作者: Five66 时间: 2023-8-29 22:23
回复 7# 思想之翼
试试下面的还行不行吧- gawk "BEGIN{distart=0;diend=999}{for(i=1;i<=NF;i++){A[$i]=1}}END{for(i=distart;i<=diend;i++){j=sprintf(\"%%03d\",i);if(!A[j]){print j}}}" aaa.txt >bbb.txt
复制代码
作者: hfxiang 时间: 2023-8-30 10:16
回复 1# 思想之翼
看到了已解决了,但还是来个自认为简洁一点的- gawk "{for(i=1;i<=NF;i++)a[$i]}END{for(i=1;i<1000;i++){B=sprintf(\"%03d\",i);if(!(B in a))printf(\"%s \",B)}}" a.txt>b.txt
复制代码
作者: 思想之翼 时间: 2023-8-30 21:26
回复 10# hfxiang
感谢!结果正确,但缺少换行回车。
作者: Nsqs 时间: 2023-8-31 07:42
本帖最后由 Nsqs 于 2023-8-31 08:12 编辑
- $source=@'
- 000 001
- 002
- '@
-
- 0..999|%{$diff='{0:d3}' -f $_;if(!($source -match '{0:d3}' -f $diff)){[PSCustomObject]@{缺少=$diff}}}
复制代码
来段PowerShell的解法
bat:- @echo off
- set "file=1.txt"
- powershell -noprofile -executionpolicy bypass "$source=gc %file%;0..999|%%{$diff='{0:d3}' -f $_;if(!($source -match '{0:d3}' -f $diff)){[PSCustomObject]@{缺少=$diff}}}">b.txt
复制代码
作者: hfxiang 时间: 2023-8-31 10:56
回复 11# 思想之翼
俺看到1楼的结果是连续的,还特别做了处理,不让换行,要换行的如下(在命令行中执行):- gawk "{for(i=1;i<=NF;i++)a[$i]}END{for(i=1;i<1000;i++){B=sprintf(\"%03d\",i);if(!(B in a))print B}}" a.txt>b.txt
复制代码
作者: 思想之翼 时间: 2023-8-31 11:12
回复 13# hfxiang
感谢!13#结果正确。10#结果横排连续,只是横排的末尾数据,缺少换行,请问如何添加?
作者: hfxiang 时间: 2023-8-31 15:25
回复 14# 思想之翼
没明白是什么意思 。
既然13#满足要求,就用13#的,丢弃10#的。
作者: Five66 时间: 2023-8-31 15:55
回复 15# hfxiang
意思是10#代码输出的最末尾没有换行符,printf的输出是不换行的
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |