这是我的剧本。它使用行数打印文件中的每一行。 接下来,我想了解用户选择的行,并将其保存到某个变量中。
URI uri = new URI("/forum/article.jsp?id=2¶=4");
UrlEncodedQueryString queryString = UrlEncodedQueryString.parse(uri);
queryString.set("id", 3);
queryString.remove("para");
System.out.println(queryString);
然后我想将所选行打印/保存到文件中。
我该怎么做?
当我 I=1
for ROW in $(cat file.txt)
do
echo "$I $ROW"
I=`expr $I + 1`
done
read var
awk 'FNR = $var {print}' file.txt
时,它正确显示了我的数字。但是当我试图在awk中使用这个变量时,它会打印每一行。
如何从文件中读取'var'行?
此外,如何将此行保存在其他变量中?
示例file.txt
echo $var
当我点击3时,我想从文件中读取第三行。
答案 0 :(得分:1)
试试这个:
cat -n file.txt; read var; line="$(sed -n ${var}p file)"; echo "$line"
更多关注Dryingsoussage的版本:
#!/bin/bash
file="file.txt"
declare -i counter=0 # set integer attribute
var=0
while read -r line; do
counter=counter+1
printf "%d %s\n" "$counter" "$line"
done < "$file"
# check for number and greater-than 0 and less-than-or-equal $counter
until [[ $var =~ ^[0-9]+$ ]] && [[ $var -gt 0 ]] && [[ $var -le $counter ]]; do
read -p "Enter line number:" var
done
awk -v var="$var" 'FNR==var {print}' "$file"
答案 1 :(得分:0)
你不能在里面使用$ varname''它们将无法解析。
看看这篇文章它应该对你有所帮助: How to use shell variables in an awk script
答案 2 :(得分:0)
首先:你不能在单引号中使用$var
,因为echo'$ var'将是普通的$ var,没有它的值。
第二:您使用=
(赋值)运算符而不是==
(相等)运算符
第三:如果要打印行,则无需编写{ print }
。你可以不写任何东西
第四:正如下面删除的评论中所解释的那样 - 不要让bash扩展awk脚本代码中的变量,因为它可能导致代码注入。
所以结论是:
awk -v var="$var" 'FNR == var' file.txt
应该做你想做的事。
答案 3 :(得分:0)
cat -n file.txt
read var
row="$(awk -v tgt="$var" 'NR==tgt{print;exit}' file.txt)"