如何从文件中获取“变量”行?

时间:2016-01-26 20:09:05

标签: bash awk sed grep

这是我的剧本。它使用行数打印文件中的每一行。 接下来,我想了解用户选择的行,并将其保存到某个变量中。

 URI uri = new URI("/forum/article.jsp?id=2&para=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时,我想从文件中读取第三行。

4 个答案:

答案 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)"