Board logo

标题: gawk命令该如何将带有长路径的文件放入到语句中? [打印本页]

作者: youaoyi     时间: 2008-9-17 10:35    标题: 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 ]
作者: HAT     时间: 2008-9-17 11:27

@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

作者: youaoyi     时间: 2008-9-17 11:44
仍需要解决长目录名(比如桌面)下文档的拖入,以及待处理文本的文件名中带有特殊字符(比如 -.空格)的问题。

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

[ Last edited by youaoyi on 2008-9-17 at 11:51 AM ]
作者: metoo     时间: 2008-9-17 20:13
脚本中使用路径类似注册表,需要双斜杠。本人很顽固,不管事情大小全部用脚本不用选项,自己试试吧
作者: HAT     时间: 2008-9-17 20:59

@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"