我試圖在大數據文件中計算包含數字的字符串,併爲此使用「for i循環」來連續搜索它們。這裏是我的代碼:如何在awk中使用for循環搜索模式
#!/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中只產生空的空間。我做錯了什麼?
我試圖在大數據文件中計算包含數字的字符串,併爲此使用「for i循環」來連續搜索它們。這裏是我的代碼:如何在awk中使用for循環搜索模式
#!/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中只產生空的空間。我做錯了什麼?
只是整個事情在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
你不能直接在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
試試這個
awk -F "\t" '{for (i=2;i<=253;i++) if ($3 ~ /^names.i$/) ++c} END {print c}' myfile
是的,我也試過,但由於某種原因,它只是給出空輸出:( – schekn
你不能在一個文字regexp('/^names.i $ /')中包含一個變量('i') - 它是作爲字母i處理,就像該RE中的所有其他字母一樣 –
非常感謝Ed,我一直在努力做到這一點,它的作用像一個魅力!非常感謝! – schekn