将print语句附加到文件中的每一行,前一行作为输出

时间:2014-11-21 21:28:12

标签: linux shell command-line

在对重新启动崩溃进行故障排除时,我需要将文件中的每一行打印到输出控制台。我想要做的是运行一个linux命令行或脚本来获取文件中的每一行,并在包含该行之后放置一个print语句,例如:

while x<100
    x=x+1
end while

会变成

while x<100
print "while x<100"
    x=x+1
    print "x=x+1"
end while
print "end while"

如果打印语句可以包含行号,那就更好了:

while x<100
print "Line 50: while x<100"
    x=x+1
    print "Line 52:x=x+1"
end while
print "Line 54: end while"

这里的想法是找到脚本中执行的最后一行,因为这可能是导致设备重启的行。目前我手动执行此操作,添加所有这些行非常耗时。

我知道SED和AWK的存在,但从未使用它们,我确实经常使用ex / vi / grep / ls / wc在文本文件中排序并具有基本shell的经验脚本。

编辑:请注意,我的问题中没有一个代码是shell脚本。我正在寻找有关创建shell脚本或命令行来处理文件的帮助,以便文件中的每一行后跟一个包含前一行的print语句。

2 个答案:

答案 0 :(得分:2)

awk '{printf("%s\nprint \"Line %s : %s\"\n",$0,++NR, $0)}' infile > outfile

while x<100
print "Line 2 : while x<100"
    x=x+1
print "Line 4 :     x=x+1"
end while
print "Line 6 : end while"

$0是每行的内容,NR是行/记录号。


对于已经有引号和print语句的行,请使用以下修改后的awk命令:

awk '{printf("%s\nprint \"Line %s : ",$0,++NR)} {gsub(/\"/,"\\\"");printf $0"\"\n"}' infile > outfile

答案 1 :(得分:1)

好吧,基本的Bash shell脚本将是

while read -r line
do
  echo "$line"
  printf "print \"%q\"\n" "$line"
done

这只使用bash builtins,并且意味着放在脚本文件中(在终端输入它可能会混淆read命令)。它目前从stdin获取输入,但是command < file.txt之类的重定向操作符将修复它。

还要注意在%q的调用中使用printf格式说明符,它确保可以将结果输出传递回shell以获取相同的文本。< / p>