在 csv 文件中使用循环为每一行创建单独的文件

在 csv 文件中使用循环为每一行创建单独的文件

我有一个 csv 文件,其中包含

a,b,c  
d,e,f   
g,h,i   

现在使用这个我想为该 csv 的每个记录创建 3 个单独的文件a.txt, d.txt, (以第一个字段命名)。g.txt

每个文件将包含一个命令行。

  • a.txt应包含:

    cat b|grep c
    
  • d.txt应包含:

    cat e|grep f
    
  • g.txt应包含:

    cat h|grep i
    

我可以循环它们,但无法将其添加到文件中。

答案1

假设awk您想用该sh语言编写代码,这是简单的 csv,没有带引号的字段、嵌入逗号或换行符的字段:

LC_ALL=C awk -F, -v q="'" '
  function shquote(s) {
    gsub(q, q "\\" q q, s)
    return q s q
  }
  {
    file = $1".txt"
    print "grep -e "shquote($3)" < "shquote($2) > file
    close(file)
  }' < file.csv

而不是cat b | grep c,而是grep -e 'c' < 'b'这样做:

  1. 连接 a 没有意义单身的文件。在这里,您可以grep直接将 的 stdin 设置为文件,从而进行重定向,而不是通过管道传输 的输出cat
  2. 将字符串加引号以避免 shell 语法中的特殊字符出现问题。
  3. 使用grep -e regexp而不是grep regexp避免以 . 开头的正则表达式出现问题-

答案2

awk -F "," '{print "touch "$1".txt"";""echo cat "$2"|grep "$3"> "$1".txt"}' CSVfilename| sed 's/cat/"&/g'| sed 's/>/"&/g'|sh

测试并运行良好

相关内容