[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】批处理实现对文件指定倒数行的读取

本帖最后由 思想之翼 于 2023-7-18 00:08 编辑

文本1.txt记录数值为:
9
8
7
6
5
4
3
2
1
0
8

问题1:欲用纯批或者第三方工具,根据倒数第1行数值N,本例是8,读取倒数第N+1行的数值,写入文本2.txt
文本2.txt结果为:
7

问题2:欲用纯批或者第三方工具,根据倒数第1行数值N,本例是8,读取倒数第N+1行, 倒数第N+10行, 倒数第N+20行的数值,合并写入文本2.txt
文本2.txt的数据排列结构为:
7
x
y

http://www.bathome.net/viewthrea ... 1%2B%D0%D0%2B%CA%FD
注:参考该贴,搞不定如何读取倒数行的问题。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. ::以下是问题2 代码2; 把第8行中的 9 19 删除就是代码1
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. for /f "useback delims=" %%a in ("1.txt") do (
  5. set /a n+=1
  6. set m=%%a
  7. )
  8. (for %%a in (0 9 19) do (
  9. set /a l=n-m-%%a,k=0
  10. for /f "useback delims=" %%b in ("1.txt") do (
  11. set /a k+=1
  12. if !k! equ !l! echo %%b
  13. )
  14. ))>"2.txt"
  15. endlocal
  16. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

用的busybox-w32
sed '$s/[^0-9]*$/\n/' a.txt | tac | awk 'NR==1{n=1+$0}NR==n{print}'
1

评分人数

TOP

2楼代码第8、9行这样改一下应当更容易理解:
  1. (for %%a in (1 10 20) do (
  2. set /a l=n-m-%%a+1,k=0
复制代码
1

评分人数

TOP

  1. gawk -v "s=1 10 20" "BEGIN{split(s, a)} {b[NR]=$0} END {for(i in a)print b[NR-b[NR]-a[i]+1]}" 1.txt > 2.txt
复制代码
1

评分人数

TOP

回复 5# WHY
感谢!经实测,读取结果第1行为空。

TOP

回复 6# 思想之翼


    出现这种问题最好给一个真实的测试文本,
我测试没问题,而你测试有问题,那到底是什么问题?天知道。
1

评分人数

    • 思想之翼: 测试正确。出错原因:文件末尾多了一空行。技术 + 1

TOP

返回列表