Shell-Script
在 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
我可以循環它們,但我無法在文件中添加它。
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'
:
- 連接單個文件沒有意義。在這裡,您可以
grep
直接將 ’s 文件作為標準輸入,從而進行重定向,而不是通過管道輸出cat
.- 字元串被引用以避免在 shell 語法中的特殊字元出現問題。
- 使用
grep -e regexp
而不是grep regexp
避免以 . 開頭的正則表達式出現問題-
。