检查文件中是否有字符串的Ruby脚本?

检查文件中是否有字符串的Ruby脚本?,ruby,bash,csv,awk,Ruby,Bash,Csv,Awk,我有CSV文件的单词及其频率,还有一个.txt文件,其中包含几个感兴趣的单词,用换行符隔开 我正在寻找一种方法来检查,对于CSV的每一行,第一列值(单词)是否也在.txt文件中 我猜类似于fgrep-x-f patternfile.txt data.csv的东西,除了只有一列csv而不是整行 要至少一次检查文件中是否有特定字符串,请执行以下操作: IO.readlines(filename).map(&:chomp).include?("somestring") 如果我们使用的是bas

我有CSV文件的单词及其频率,还有一个.txt文件,其中包含几个感兴趣的单词,用换行符隔开

我正在寻找一种方法来检查,对于CSV的每一行,第一列值(单词)是否也在.txt文件中


我猜类似于
fgrep-x-f patternfile.txt data.csv
的东西,除了只有一列csv而不是整行

要至少一次检查文件中是否有特定字符串,请执行以下操作:

IO.readlines(filename).map(&:chomp).include?("somestring")

如果我们使用的是bash,那么它将是:

fgrep -x -f patternfile.txt data.csv | awk '{print $2}'

使用
awk
从grep结果中获取第二列的简单方法是-

awk -v FS="," 'NR==FNR{a[$1]=$0;next} ($1 in a){print a[$1]}' csv_file txt_file
  • 将字段分隔符设置为
  • 使用csv文件的第一列(单词)作为索引,加载数组中的整行
  • 检查文本文件的值是否在数组中
  • 如果是,请打印它
测试:
嘿,你可以使用FasterCSV打开和循环记录

        FasterCSV.foreach("#{file_path}") do |row| 
        puts row[0]#row[0] is the first column only
        end 
要结合以下内容和答案:


您的问题是如何读取CSV,如何在行上循环,或者如何读取文件是否有字符串?您能展示一下您的CSV文件是如何构造的吗?这对于awk脚本来说应该很容易。如果patternfile只约束和CSV的第二列匹配的字符串呢?如中所示,我希望在末尾打印整个CSV行,但仅打印第二列值包含在patternfile.txt?中的行,对于CSV:red,文本文件为5:red@AmyLi在问题中,您已将第二个值作为word发布。哦,对不起!那是我的打字错误。:)但是谢谢你!
        FasterCSV.foreach("#{file_path}") do |row| 
        puts row[0]#row[0] is the first column only
        end 
require 'csv'
words = File.readlines("words.txt").map(&:chomp)
CSV::foreach("data.csv") {|row| puts row.to_csv if words.include?(row[0])}