Bash脚本更改每个文件的输出文件

时间:2016-03-11 09:24:23

标签: bash file awk output

我正在尝试在文件夹中的每个文件.log上使用命令,但我无法理解如何更改文件夹中每个文件的输出文件。

#!/bin/bash
N="0"
for i in "*.log"
do
    echo "Processing $f file..."
    cat $i | grep "test" | awk '/show/ {a = $1} !/show/{print a,$6}' > "log$N.txt"
done

如何增加log $ n.txt的计数器?

2 个答案:

答案 0 :(得分:3)

编写shell循环只是为了处理文本是不好的做法(参见https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice)。这就是你所需要的:

awk '
    FNR==1  { print "Processing", FILENAME; a=""; close(out); out="log" fileNr++ ".txt" }
    !/test/ { next }
    /show/  { a = $1; next }
    { print a, $6 > out }
' *.log

答案 1 :(得分:1)

#!/bin/bash
N="0"
for i in *.log
do
    echo "Processing $f file..."
    cat $i | grep "test" | awk '/show/ {a = $1} !/show/{print a,$6}' > "log$N.txt"
    N=$((N+1))
done

你需要增加变量' N'在每次迭代中删除for循环中的双引号