我试图根据文件中的固定位置从文本文件的每一行获取子字符串。我想用命令行实现这一点。
我的文件看起来像这样:
45testing45
46testing46
47testing47
48testing48
49testing49
50testing50
51testing51
52testing52
53testing53
我尝试了以下命令行:
For -F %i in (inputFile.txt) do (SET _line=%i SET _chars=%_line:~10,2% @echo _chars > outputFile.txt)
但结果是outputFile.txt被创建但是空了,当我在命令提示符中点击SET时,我看到_line变量就是这样_line = 53testing53 SET _chars =%_ line:~10,2%@echo _chars > outputFile.txt) 我不明白为什么,我想我错过了DO部分的分隔符,以便我可以分开不同的SET命令。
你能帮我把新文件的最后2位数输入新的输出文件吗?我已经下载了Cygwin,所以我也对Unix命令开放,但我不明白如何使用sed或awk提取文件每一行的固定长度子字符串。
提前致谢。
答案 0 :(得分:1)
这可能对您有用:
(For /F %A In (inputFile.txt) Do @Set "_=%A"&Call Echo ^%_:~-2^%)>outputFile.txt
答案 1 :(得分:0)
你有一些拼写错误,我把它放到一个脚本中。
For /F %%i in (inputFile.txt) do (CALL :DisplaySubString %%i)
GOTO :EOF
:DisplaySubString
SET _line=%1
SET _chars=%_line:~9,2%
@echo %_chars% >> outfile.txt
一个问题是你试图在()
内处理变量。您需要使用DelayedExpansion来执行此操作。
为了解决这个问题,我在名为:DisplaySubString
的.cmd文件中创建了一个“子例程”。
您的索引关闭了一个,10
- > 9
。
@echo %_chars%
错过了%
您必须使用>>
代替>
来附加到文件中。
答案 2 :(得分:0)
实际上,如果你想用sed(see this repo for the details)解决这个问题,你在Windows中并不需要Cygwin。在PATH变量中下载并放置sed二进制文件后,您可以在命令提示符下键入命令:
sed -r "s/.*([0-9]{2})/\1/" input.txt > output.txt
并且它已经完成了。您可以在线找到sed的手册页here。 纯cmd脚本:
@echo off
setlocal enabledelayedexpansion
set "f=C:\files\input.txt"
>C:\files\output.txt (for /f %%i in (%f%) do (
set "l=%%i"
echo !l:~-2!
))
endlocal
exit /b