Grep in a for loop in Linux



我有一个文件,其中包含一定次数的确定字符串,称为"热化学"。我试图编写一个脚本来 grep 500 行以上每次出现此字符串,并创建一个相应编号的新文件。我试过这个

occurrences="$(grep -c 'Thermochemistry' $FILE)"
for  (( i=1; i<=$occurrences; i++)); do
grep -B500 -m "$i" 'Thermochemistry' $FILE > newfile_"$i".tmp
done

如果文件中出现了 20 次"热化学",我希望它创建 20 个新文件,称为newfile_1.tmpnewfile_20.tmp,但它不起作用。

谁能帮忙?

在 oguz ismail 的 magic 命令旁边,您可以使用以下 awk 行:

awk '/Thermochemistry/{close(f);f="newfile_"++i".tmp"
for(i=FNR;i<=FNR+(FNR>500?500:FNR);++i) print b[i%500] > f
}{b[FNR%500]=$0}' file

最新更新