脚本:仅复制两个指定行之间的部分

时间:2013-06-11 14:37:43

标签: bash vim awk

E.g。

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

aaa
bbb
ccc
ddd
eee 

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

script.sh a.txt 2 4

输出:

bbb
ccc
ddd

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

4 个答案:

答案 0 :(得分:6)

您可以使用awk

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

一般来说,

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

因此,您需要在脚本中阅读$file$first$last


更新

基于doubleDown comment(谢谢!),也可以这样做:

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

更一般:

awk -v beginning=$first -v end=$last 'NR==beginning, NR==end' $file

答案 1 :(得分:5)

sed是一个处理这个问题的原始工具:

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

sed1line.txt; sed单行的绝佳资源。

答案 2 :(得分:3)

最简洁的方法是使用sed

$ sed '2,4!d' file
bbb
ccc
ddd

答案 3 :(得分: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