如何在awk中使用搜索模式中的i循环

时间:2014-01-13 11:35:38

标签: bash awk

我正在尝试计算在大数据文件中包含数字的字符串,为此使用“for i loop”连续搜索所有这些字符串。这是我的代码:

#!/bin/bash
for (( i=2; i<=253; i++ ))
do
awk -F "\t" '$3 ~ /^names.i$/ {++c} END {print c}' myfile >> output.txt
done

出于某种原因,虽然使用awk只提供正确的输出,但脚本在shell中只生成空格。我做错了什么?

3 个答案:

答案 0 :(得分:3)

在1 awk调用中执行整个操作:

awk -F '\t' '
{ split($3,arr,/\./); ++c[arr[2]] }
END { for (i=2;i <= 253;i++) print c[i]+0 }
' myfile > output.txt

答案 1 :(得分:2)

你不能直接在awk中使用shell变量i。首先将它传递给awk:

for (( i=2; i<=253; i++ ))
do
   awk -v i=$i -F "\t" '$3 ~ "^names\." i "$" {++c} END {print c}' myfile >> output.txt
done

答案 2 :(得分:1)

试试这个

awk -F "\t" '{for (i=2;i<=253;i++) if ($3 ~ /^names.i$/) ++c} END {print c}' myfile