中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » gawk命令该如何将带有长路径的文件放入到语句中?
作者:
标题: gawk命令该如何将带有长路径的文件放入到语句中? 上一主题 | 下一主题
youaoyi
初级用户





积分 154
发帖 67
注册 2007-10-31
状态 离线
『楼 主』:  gawk命令该如何将带有长路径的文件放入到语句中?

gawk -F"|" -v line=7 "NF!=line+1{print>\"新文本1.txt\"}NF==line+1{print>\"新文本2.txt\"}" a.txt

运行后可以将文本中分隔符为7个的行与不是7个的行分成两个文本。

为了方便操作并把新生成的文本放在原文件同目录下,

修改成下面这样后就不能正常运行了,

gawk命令该如何将带有路径的文件放入到语句中呢?

@echo off
set path=%path%;"%ProgramFiles%\tools"
echo.
echo.
set /p file= 请将要处理的文本拖放到这里:
echo.
set /p geshu= 此文本每行中应该有几个分隔符:
set /a geshu+=1
echo.
gawk -F"|" "NF!=%geshu%{print>\"%file%.新文本1.txt\"}NF==%geshu%{print>\"%file%.新文本2.txt\"}" "%file%"
echo.
pause

==================================

样本:  a.txt
1|0757 | 合同 | 其它 | 殷晏 | 200837015029392 | 4000.0 |
2|0752 | 合同 | 经济原因 | 葛宝 | 200000026251 | 10232.35 |
3|2810 | 合同 | 经济原因 | 王传 | 2002810000013079 | 479.0 |
4|2810 | 合同 | 经济原因 | 王传 | 20028000013079 | 479.0 |
5|2810 | 合同 | 经济原因 | 趙朹 | 燕 | 200231000013099 | 939.0 |
6|2810 | 合同 | 经济原因 | 王传 | 200237281000013079 | 23.72 |
7|2810 | 合同 | 经济原因 | 王传 | 200237810000013079 | 260.28 |
8|0808 | 合同 | 经济原因 | 梁汝 | 2005300005411 | 280.0 |
9|1104 | 合同 | 其它 | 张成 | 2008374015010838 | 1630.0 |
10|1104 | 合同 | 其它 | 张成 | 200830015010838 | 36.0 |
11|1104 | 合同 | 其它 | 张成 | 200837015010845 | 10.0 |
12|1104 | 合同 | 其它 | 张成 | 20083715010845 | 10.0 |
13|1104 | 合同 | 其它 | 张成 | 20083602015010845 四湖 |

[ Last edited by youaoyi on 2008-9-17 at 11:52 AM ]

2008-9-17 10:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  


@echo off
set path=%path%;"%ProgramFiles%\tools"
echo.
echo.
set /p file= 请将要处理的文本拖放到这里:
echo.
set /p geshu= 此文本每行中应该有几个分隔符:
set /a geshu+=1
echo.
set tmpfile=%file:\=\\%
gawk -F"|" "NF!=%geshu%{print>\"%tmpfile%.新文本1.txt\"}NF==%geshu%{print>\"%tmpfile%.新文本2.txt\"}" "%file%"
echo.
pause




2008-9-17 11:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youaoyi
初级用户





积分 154
发帖 67
注册 2007-10-31
状态 离线
『第 3 楼』:  

仍需要解决长目录名(比如桌面)下文档的拖入,以及待处理文本的文件名中带有特殊字符(比如 -.空格)的问题。

比如处理 “C:\Documents and Settings\Administrator\桌面\测试文本\T1. T 2.5.a---7.txt”这个文档就仍然会产生问题。

[ Last edited by youaoyi on 2008-9-17 at 11:51 AM ]

2008-9-17 11:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
metoo
初级用户





积分 195
发帖 93
注册 2006-10-28
状态 离线
『第 4 楼』:  

脚本中使用路径类似注册表,需要双斜杠。本人很顽固,不管事情大小全部用脚本不用选项,自己试试吧

2008-9-17 20:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  


@echo off
set path=%path%;"%ProgramFiles%\tools"
echo.
echo.
set /p file= 请将要处理的文本拖放到这里:
echo.
set /p geshu= 此文本每行中应该有几个分隔符:
set /a geshu+=1
echo.
set file=%file:"=%
for /f "delims=" %%a in ('dir /s /b "%file%"') do (
  set shortfile=%%~sa
  set filename=%%~nxa
)
set tmpfile=%shortfile:\=\\%
gawk -F"|" "NF!=%geshu%{print>\"%tmpfile%.新文本1.txt\"}NF==%geshu%{print>\"%tmpfile%.新文本2.txt\"}" "%file%"
ren "%shortfile%.新文本1.txt" "%filename%.新文本1.txt"
ren "%shortfile%.新文本2.txt" "%filename%.新文本2.txt"




2008-9-17 20:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: