新手问题 [已解决] printf 格式化输出如何写入到文件

LinuxGit · 2016年05月08日 · 最后由 linuxgit 回复于 2016年05月09日 · 4414 次阅读
File.open('b.txt', 'w') do |f|
  f.puts "curl command example:"
  f.write "curl -I music.baidu.com\n"
  f << "python\n"
end

在写一个 Ruby 脚本,想把输出结果写入文件,有些输出需要格式化输出,比如

printf("%-10s\n", 'ruby')

如何将这样的输出写入到文件呢,求指教?

f << "%-10s, %s\n" % ["Ruby", "Python"]

微信群提示先格式化,我测试下用上面的方法可以写入。

我想我会这么写 f << format("%-10s, %s\n", "Ruby", "Python")

#2 楼 @shallmentmo 嗯哇,你的可读性比我的好很多。 我还遇到个问题,😂 我的脚本文件只写入最后一行的结果,但上面的帖子却可以。

#!/usr/bin/env ruby

File.foreach("domain.txt") do |line|
  result = `host -t cname #{line}`
  domain = line.chomp
  File.open('query.txt', 'w') do |f|
    if result =~ /an alias/
      cname  = result.split.last.chop
      printf("%-40s %s\n", "#{domain}", "#{cname}")
      f << "#{cname}\n"
    elsif result =~ /no CNAME/
      ip = `dig +short #{line}`.split.join("   ")
      printf("%-40s %s\n", "#{domain}", "#{ip}")
      f << "#{ip}\n"
    else
      printf("%-40s %s\n", "#{domain}", "================Please check this domain.==============")
      f << "Please check this domain.\n"
    end
  end
end

@linuxgit 模式 描述 r 只读模式。文件指针被放置在文件的开头。这是默认模式。 r+ 读写模式。文件指针被放置在文件的开头。 w 只写模式。如果文件存在,则重写文件。如果文件不存在,则创建一个新文件用于写入。 w+ 读写模式。如果文件存在,则重写已存在的文件。如果文件不存在,则创建一个新文件用于读写。 a 只写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于写入。 a+ 读写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于读写。

本来就可以在文件对象上直接调用 printf 啊

f.printf("%-10s\n", 'ruby')

printf 是 IO 类的一个实例方法,File 类继承于 IO,所以其对象可以直接用 printf

#4 楼 @bajiudongfeng 谢谢,我把 File.open('query.txt', 'w') do |f| 放在脚本最外层可以了,哈哈。

#5 楼 @skandhas 原来这样就可以,对我以后写运维脚本很有用。谢谢😊

需要 登录 后方可回复, 如果你还没有账号请 注册新账号