我有一个 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'
这样做:
- 连接 a 没有意义单身的文件。在这里,您可以
grep
直接将 的 stdin 设置为文件,从而进行重定向,而不是通过管道传输 的输出cat
。 - 将字符串加引号以避免 shell 语法中的特殊字符出现问题。
- 使用
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
测试并运行良好