0

例如

文件a.txt具有以下上下文

aaa
bbb
ccc
ddd
eee 

可以实现此目标的脚本是什么,例如

script.sh a.txt 2 4

输出:

bbb
ccc
ddd

其中 2 和 4 是指定的行号。

4

4 回答 4

6

You can use awk for this:

awk 'NR>=2 && NR<=4' file

In general,

awk -v beginning=$first -v end=$last 'NR>=beginning && NR<=end' $file

so it is a matter of reading $file, $first and $last in your script.


Update:

Based on doubleDown comment (thanks!), it can also be done like this:

awk 'NR==2, NR==4' file

and more general:

awk -v beginning=$first -v end=$last 'NR==beginning, NR==end' $file
于 2013-06-11T14:39:14.877 回答
5

sed是一个可以很好地处理这个问题的原始工具:

sed -n '2,4p' file          # method 1
sed '2,4!d' file            # method 2

sed1line.txt;单线的一个很好的资源sed

于 2013-06-11T14:47:35.247 回答
3

最简洁的方法是使用sed

$ sed '2,4!d' file
bbb
ccc
ddd
于 2013-06-11T14:45:40.093 回答
0

如前所述,最好的选择是使用 awk 或 sed。如果你喜欢只使用传统的工具,你可以做这样的把戏(其中 $FILE 是 a.txt):

#!/bin/env bash
FILE=a.txt
SIZE=`wc -l $FILE`
let STARTPOS=$SIZE-$1
let OFFSET=$2-$1
cat $FILE | tail -n $STARTPOS | head -n $OFFSET
于 2013-06-11T14:52:08.037 回答