批处理脚本中的AWK等效项

时间:2012-10-08 06:21:51

标签: awk find batch-file

我想要一个与此AWK脚本等效的批处理脚本:

awk '{print $3}'

文件包含以下内容:

XXX YYY : 8
Rrr rrr : 7
ddd rrr : 9

我想要一个批处理脚本来打印

8, 7, 9

是否有任何方法可以将每个值分配给循环并重定向到if条件?

5 个答案:

答案 0 :(得分:5)

我无法判断您是否要求使用Windows批处理脚本或awk脚本,所以这两者都是:

的test.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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

另一种解决方案:

 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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

直接输出到终端

如果您已经有awk.exe尝试步骤(3),请先尝试(1:3)

AWK GAWK 取代,后者也向后兼容(检查(3))。

  1. 获得正确的GAWK

    所以我使用Gawk v3.6.1运行setup link。运行 gawk-3.1.6-1-setup.exe

    在安装过程中,请注意您提取/安装到的目录的路径,选中二进制文件&amp;文档&amp;其余的是你的偏好。

  2. 提取GAWK

    安装完成后,导航到您在安装和安装中记下的路径,从安装目录中解压缩 gawk.exe 。转到 bin目录。 复制 gawk.exe ,然后导航到您希望提供gawk功能的批处理文件(* .bat)的目录。粘贴它(因为它的便携式* .exe和我的批次的目的需要自包含)。

  3. 使用正确的命令

    这些命令直接打印到终端很好地格式化了我失踪的关键字花了一整天才找到搜索互联网,然后阅读近2000行的文本文件&amp;在大括号之前找到 BEGIN 。 在阅读 * \ man \ cat1

    中的 gawk.1.txt 之后,我才想到这一点。
    gawk "BEGIN { print \"Hello world\"}"
    
    REM If you have printf from GNUwin32
    gawk "BEGIN { printf \"Hello world\"}"