繁体   English   中英

将打印语句附加到文件中的每一行,并以上一行作为输出

[英]Append a print statement to every line in a file with the previous line as output

在对重启崩溃进行故障排除时,我需要将文件中的每一行打印到输出控制台。 我要执行的是运行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脚本或命令行来处理文件的帮助,以使文件中的每一行后面都包含一条包含前一行的打印语句。

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是行/记录号。


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

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

好吧,基本的Bash Shell脚本是

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

这仅使用bash内置函数,并打算放置在脚本文件中(在终端上键入该文件可能会使read命令感到困惑)。 当前它从stdin接收输入,但是重定向操作符(例如command < file.txt将解决此问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM