Shell-Script

在 csv 文件中使用循環為每一行創建單獨的文件

  • January 3, 2021

我有一個 csv 文件包含

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

現在使用這個我想為該csv的每條記錄創建3個單獨的文件a.txt,,d.txtg.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 cgrep -e 'c' < 'b'

  1. 連接單個文件沒有意義。在這裡,您可以grep直接將 ’s 文件作為標準輸入,從而進行重定向,而不是通過管道輸出cat.
  2. 字元串被引用以避免在 shell 語法中的特殊字元出現問題。
  3. 使用grep -e regexp而不是grep regexp避免以 . 開頭的正則表達式出現問題-

引用自:https://unix.stackexchange.com/questions/626592