2014-03-12 65 views
1
function func { 
awk -v fr="$1" -v ft="$2" '/fr/,/ft/' text.txt } 
func "frame 44" "frame 1000" 

功能应该抓住框架44和帧1000然而的匹配之间的线,AWK查找“FR”代替“帧44”,使得例如“框架1”在文本文件中匹配。我该如何解决这个问题?awk不寄存器内部变量intitiations

+0

您不能使用'/ fr /'来匹配输入变量'fr'。使用'$ 0〜fr' .. –

+0

您是否还希望包含“frame 44”和“frame 1000”的行,还是只想要两行之间的行? –

+0

谢谢,不知道。不,页眉和页脚匹配不重要。然后会有什么不同呢? – user3412984

回答

2

尝试此命令:

awk -v fr="$1" -v ft="$2" ' 
    $0 ~ fr { inFrame=1 } 
    inFrame {print} 
    $0 ~ ft { inFrame=0 }' text.txt 

这也将包括页眉和页脚行。

要跳过页眉和页脚,请尝试:

$0 ~ fr { inFrame=1; next } 
$0 ~ ft { inFrame=0 } 
inFrame {print} 
0

如何使用sed的呢?

function func() { 
    sed -n "/$1/,/$2/p" text.txt 
} 
+0

为什么不呢。这工作完美无缺,谢谢! – user3412984