我的文件包含8000行,我想打印1,4,8,12,...,7996行。
我尝试了这段代码
for j in {1 .. 8000}
do
k= $((4 * $j))
print k
sed -n $k P test.dat >> test.dat1
done
但出现此错误:
./ test.csh:第3行:4 * {1:语法错误:预期操作数(错误令牌为“ {1”)
问题是什么,我该怎么办?
答案 0 :(得分:2)
使用awk
命令:
awk 'NR%4==1{print}' input.txt
NR % 4 == 1 { # for every input line, which line number (NR) modulo 4 is 1
print $0; # print the line
}
答案 1 :(得分:1)
如果您喜欢sed
sed -n '0~4p'
有趣的是,这是man sed
“第一个步骤” 此GNU扩展名与以行开头的所有STEPth行匹配 第一。特别是,当存在 非负N,以使当前行号等于FIRST +(N * 步)。因此,将使用“ 1〜2”来选择奇数 行,偶数行为“ 0〜2”;选择每三行 从第二个开始,将使用“ 2〜3”;每五分之一 从第十行开始,使用“ 10〜5”;而“ 50〜0”只是一个 晦涩的说“ 50”的方式。
The following commands demonstrate the step address usage: $ seq 10 | sed -n '0~4p' 4 8
答案 2 :(得分:0)
即使您的问题被标记为csh,您似乎仍在尝试使用Bash语法。
即使如此,这仍然存在多个错误。赋值运算符后不能有空格,并且需要引用sed
脚本(否则它认为P
是第一个文件名...或者我猜你实际上是在说{{1 }}。
但是您需要将文件循环8000次并在每次迭代中打印出一行的想法也是有缺陷的。您可以告诉p
使用单个脚本(如
sed
不过,我会为此切换到Awk。
sed -n -e 1p -e 5p -e 9p ... filename