我想要一个与此 AWK 脚本等效的批处理脚本:
awk '{print $3}'
文件具有以下内容:
XXX YYY : 8
Rrr rrr : 7
ddd rrr : 9
我想打印一个批处理脚本
8, 7, 9
有什么方法可以将每个值分配给循环并重定向到 if 条件?
我想要一个与此 AWK 脚本等效的批处理脚本:
awk '{print $3}'
文件具有以下内容:
XXX YYY : 8
Rrr rrr : 7
ddd rrr : 9
我想打印一个批处理脚本
8, 7, 9
有什么方法可以将每个值分配给循环并重定向到 if 条件?
我不知道您要求的是 Windows Batch 脚本还是 awk 脚本,所以两者都有:
测试.txt:
XXX YYY : 8
Rrr rrr : 7
ddd rrr : 9
AWK:
awk 'NR > 1 {printf ", "}{printf $4}END{printf "\n"}' test.txt
输出:
8, 7, 9
Windows 批处理脚本:
@echo off
SET _c=
FOR /F "tokens=4 delims= " %%G IN (test.txt) DO (
IF DEFINED _c <nul set /p z=", "
<nul set /p z=%%G
SET _c=1
)
输出:
8, 7, 9
awk -F: '{x=x","$2;}END{print substr(x,2,length(x)-1)}' your_file
测试如下:
> cat temp
XXX YYY : 8
Rrr rrr : 7
ddd rrr : 9
> awk -F: '{x=x","$2;}END{print substr(x,2,length(x)-1)}' temp
8, 7, 9
另一种解决方案:
awk '{ if(NR<3) printf "%s, ", $4 }END{ print $4 }' file
结果:
echo -e "XXX YYY : 8\nRrr rrr : 7\nddd rrr : 9" | awk '{ if(NR<3) printf "%s, ", $4 }END{ print $4 }'
8, 7, 9
这将从您的示例文件awk '{print $3}'
中打印一个列表,而不是数字。:
你应该用过$4
. 或者,您在这里向我们展示了错误的文件格式。
该 awk 脚本的确切 Windows 等效项是:
FOR /F "tokens=4" %%a IN (file.txt) DO ECHO %%a
但是,您显示的所需输出8, 7, 9
也不是您的 Awk 脚本打印的内容。产生输出的最简单的批处理命令是:
FOR /F "tokens=4" %%a IN (file.txt) DO <nul SET /p="%%a, "
如果你真的无法忍受最后多余的逗号,它会变得更加复杂:
SETLOCAL
FOR /F "tokens=4" %%a IN (file.txt) DO <nul CALL SET /p=%%,%% %%a& SET ,=,
Windows 上的 AWK
顺便说一句,Awk 可用于 Windows。引用不同,因此您的脚本将是:
awk "{printf $4 \", \"}" file.txt
或者为了摆脱那个额外的逗号,它会变得更加混乱:
awk "{printf (NR>1?\", \":\"\") $4}" file.txt
如果您已经有 awk.exe,请先尝试步骤 (3),然后再尝试 (1:3)
AWK被同样向后兼容的GAWK取代(检查(3))。
获得正确的 GAWK
所以我使用 Gawk v3.6.1 运行设置链接。运行gawk-3.1.6-1-setup.exe。
在安装过程中记下您提取/安装到的目录的路径,选中二进制文件和文档,其余的是您的偏好。
提取 GAWK
安装后,通过导航到您在 install 中记下的路径并转到bin 目录,从安装目录中提取gawk.exe。复制gawk.exe然后导航到您希望赋予 gawk 功能的批处理文件 (*.bat) 的目录并粘贴它(因为它是可移植的 *.exe 并且我的批处理的目的需要是自包含的)。
使用正确的命令
这些命令直接打印到终端,很好地格式化了我缺少的关键字,我花了一整天的时间在互联网上搜索,然后阅读一个近 2000 行长的文本文件并在大括号前找到BEGIN 。在阅读*\man\cat1中的gawk.1.txt之前,我没有想到
gawk "BEGIN { print \"Hello world\"}"
REM If you have printf from GNUwin32
gawk "BEGIN { printf \"Hello world\"}"