我正在尝试在文件的第2,6,10,14行执行grep命令,但这不太有用。看来我的if语句有错误。有什么想法吗?
count=0
while read p; do
if [$count%4==2]
then
grep $p /dir/file.txt | wc -l >> output.txt
(( count++ ))
fi
done < /dir/file.txt
最后,我希望这个脚本在output.txt中列出文件中重复第2行的次数,然后重复第6行的次数,以及10和14等。
答案 0 :(得分:2)
这听起来像是awk的工具,您可以访问变量NR,它是当前正在处理的行的编号,例如,seq 14
输出1到14之间的数字,每行一个:
$ seq 14 | awk '(NR+2) % 4==0'
2
6
10
14
答案 1 :(得分:1)
你的shell语法已被清除;你需要方括号内的空格;但模运算符不是[
内置函数的一个特性,因此您需要进行几个不具吸引力的更改来修复它。
无论如何,使用Awk可以极大地简化这一过程。
awk -v pat="$p" '(NR % 4) == 2 && $0 ~ pat { ++count }
END { print count }' /dir/file.txt
NR
是当前行号,$0
是当前输入行。 pat
是您从shell变量$p
传入的模式。
答案 2 :(得分:1)
Sed有跳线。使用它来获取您想要测试的行,然后grep结果。
$ sed -e "2,~4p" -e d <infile |grep $p
答案 3 :(得分:0)
首先grep在文件中工作。如果你想grep特定行中的模式,那么你可以这样做:
i=1;
while read -r line;
do
if [ $((i++ % 2)) -eq 0 ]; then
echo "$line" | grep $p >> output.txt
fi
done </dir/file.txt