标题: [文本处理] [已解决]批处理如何实现从文本指定行开始每行开头加分号? [打印本页]
作者: jellyhk 时间: 2011-12-10 21:51 标题: [已解决]批处理如何实现从文本指定行开始每行开头加分号?
本帖最后由 pcl_test 于 2016-11-17 12:36 编辑
文件ip.txt里[文件内容要可变]复制代码
1:从第3行开始每行加分号;其他不变---得到结果复制代码
问题2:如何把取消前2行前的分号;其他不变!- ;1
- ;2
- ;3
- ;4
- ;5
- ;6
- ;7
- ;8
- ;9
复制代码
作者: CrLf 时间: 2011-12-10 23:35
复制代码
复制代码
作者: Demon 时间: 2011-12-11 00:29
- @echo off
- setlocal enabledelayedexpansion
- set /a n = 0
- (for /f %%i in (ip.txt) do (
- set /a n = n + 1
- if !n! geq 3 (
- echo ;%%i
- ) else (
- echo %%i
- )
- )) > 1.txt
- pause
复制代码
作者: jellyhk 时间: 2011-12-11 11:12
回复 3# Demon
为什么要用set /a n=0?
set n=0一样么?
作者: weichenxiehou 时间: 2011-12-11 11:23
- gawk "{print (NR>2?\";\":\"\")$0}" 1.txt
复制代码
- gawk "{print substr($0,NR>2?1:2)}" 1.txt
复制代码
作者: weichenxiehou 时间: 2011-12-11 11:29
回复 4# jellyhk
一样,在此别无二致,只是从形象上来理解,加了/a后等号成了数值赋值运算符,没加的时候等号只是字符串赋值给变量的运算符而已,在此没什么区别,但是set/a a=aa时a只会是等于0。
作者: jellyhk 时间: 2011-12-11 13:22
为什么 =0呢set/a a=aa
作者: weichenxiehou 时间: 2011-12-11 13:39
回复 7# jellyhk
因为开启了/a开关,等号右边就需要是有效地计算式,但aa不是有效的算式,规定设成0吧。
作者: awk 时间: 2011-12-11 14:05
回复 5# weichenxiehou
1:- gawk "NR>2{gsub(/^/,\";\")}1" a.txt
复制代码
- gawk "NR>2{printf \";\"}1" a.txt
复制代码
- gawk "NR>2{$0=\";\"$0}1" a.txt
复制代码
作者: awk 时间: 2011-12-11 14:08
回复 2# CrLf 复制代码
作者: weichenxiehou 时间: 2011-12-11 16:48
回复 9# awk
大侠能否讲解一下你的awk程式,着实看不懂,特别是最后那个1,发现替换成其他数字也可以。谢谢~
作者: awk 时间: 2011-12-11 22:13
回复 11# weichenxiehou
awk默认的action是print $0
只要是非0的条件它都会执行默认的action
作者: weichenxiehou 时间: 2011-12-11 22:52
回复 12# awk
哦,这么说我倒是明白了,后面又是一个pattern{action}搭配。gsub默认第三个参数为$0?第一个和第三个程式都是对$0进行处理,第二个之所以用printf是因为不会像printf默认输出ORS换行?代码还真是简洁……
作者: Hello123World 时间: 2011-12-12 13:15
1.- @echo off&SetLocal EnableDelayedExpansion
- Set n=1
- (For /f %%i in (ip.txt) do (
- If !n! geq 3 (echo.;%%i) else (echo %%i)
- Set /a n+=1)
- )>11.txt
- start 11.txt
- pause>nul
复制代码
.
2.- @echo off&SetLocal EnableDelayedExpansion
- Set n=1
- (For /f "delims=;" %%i in (ip.txt) do (
- If !n! leq 2 (echo.%%i) else (echo ;%%i)
- Set /a n+=1)
- )>11.txt
- start 11.txt
- pause>nul
复制代码
作者: cjiabing 时间: 2011-12-12 15:45
手机上,请原谅!
加分号:
for /f "skip=2 delims=" %%a in (a.txt) do echo ;%%a
去分号:
用findstr也可以
for /f "tokens=1* delims=:;" %%a in (a.txt) do (
f %%a==1
作者: CrLf 时间: 2011-12-12 16:22
回复 14# Hello123World
回复 15# cjiabing
别忘了默认情况下,for /f 隐含了 eol=; 的条件,会跳过以分号开头的行,我想这可能是楼主疑惑的原因之一。
作者: Hello123World 时间: 2011-12-13 12:27
本帖最后由 Hello123World 于 2011-12-13 12:35 编辑
回复 16# CrLf
eol=;这种默认设置,在delims=;时变得无效
For /f "delims=;" %%i in (ip.txt) do echo %%i
For /f "eol=; delims=;" %%i in (ip.txt) do echo %%i
都是可以输出的。
For /f %%i in (ip.txt) do echo %%i 却输出为空。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |