我想使用 awk 获取两个行号内的行:
startline=1
endline=12
location=$1
echo "awk -v startline="$startline" -v endline="$endline" location="$location" \
'NR>=$startline && NR<=$endline' $location"
awk_command=$("awk -v startline="$startline" -v endline="$endline" \
location="$location" \
'NR>=$startline && NR<=$endline' $location")
......但这并没有给出预期的回应。能帮忙吗?
由于 Sushma
答案 0 :(得分:1)
$
变量名称中不需要awk
。
awk -v startline="$startline" -v endline="$endline" 'NR>=startline && NR<=endline' "$location"
此外,您不必将命令存储在任何变量中。
!/bin/bash
startline=1
endline=12
location=$1
echo "awk -v startline="$startline" -v endline="$endline" 'NR>=startline && NR<=endline' "$location""
# The line below is self sufficient.
awk -v startline="$startline" -v endline="$endline" 'NR>=startline && NR<=endline' "$location"
# ^^^^ No '$' symbol in variable names
答案 1 :(得分:1)
如果您想尝试使用sed:
sed -n "$startline,$endline p" "$location"
答案 2 :(得分:1)
您将awk命令作为带引号的字符串,因此您不会执行它。变化
awk_command=$("awk ... $location")
到
awk_command=$(awk ... "$location")
然后删除$
以修改变量访问权限( awk不是shell ),方法是更改:
awk_command=$(awk ... 'NR>=$startline && NR<=$endline' "$location")
为:
awk_command=$(awk ... 'NR>=startline && NR<=endline' "$location")
我假设你的脚本中已有echo "$awk_command"
或类似内容!
答案 3 :(得分:0)
假设您将awk
的输入文件表示为$location
,请尝试以下操作:
awk -v startline="$startline" -v endline="$endline" 'NR>=startline && NR<=endline' $location
awk
中的变量不需要/使用$
符号。
答案 4 :(得分:0)
一石二鸟(变量 $ awk_command 保存必须两次包含相同的代码行),并使用潜在危险的 eval :
startline=1
endline=12
test -r "$1" || exit 1
location=$1
awk_command="awk -v startline=$startline -v endline=$endline \
'NR>=startline && NR<=endline' $location"
echo $awk_command
awk_command_output=$(eval $awk_command)
echo "$awk_command_output"
请注意必要包含测试:没有,如果某些流氓设置&#34; $ 1 &#34;到'filename ; evil ; deviltry ;'
, eval 会盲目地去做evil
等等。