Windows SED-将csv中的选项卡转换为带有双引号的管道

时间:2018-06-19 11:20:20

标签: awk sed vbscript

我在带有制表符分隔符的CSV文件中的约80列中有一些数据。我需要在Windows中对其进行转换,以便所有列都以“ \ t”分隔。 例如。

输入:

Reporting Standard_WeekName WHS_Code    Operated_by Country_Code    Standard_Customer_Name  Reporting Date  Customer_Region
201824  A05 DUBAI LL NXX    AE  EMEA <next line character> Customer

所需的输出:

"Reporting Standard_WeekName"|"WHS_Code"|"Operated_by"|"Country_Code"|"Standard_Customer_Name"|"Reporting Date"|"Customer_Region"
"201824"|"A05"|"DUBAI"|"LL"|"NXX"|"AE"|"EMEA <next line character> Customer"

请注意,在Customer_region列中,数据为EMEA客户,中间是下一行字符。

预先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

sed -e 's/^/"/' -e 's/$/"/' -e 's/\t/"\t"/g' file > outfile

这由-e命令传递的三个不同的替换组成。

前两个用双qoute(“)替换begin(^)和end($)

第三个选项卡将每个选项卡替换为带有双qoutes的选项卡

答案 1 :(得分:0)

我认为使用Windows上的“工具” 来尝试(某种自虐)很有趣,因此请将此脚本另存为replace.vbs

Set TabobjRegEx     = CreateObject("VBScript.RegExp")
TabobjRegEx.Global  = True   
TabobjRegEx.Pattern = "\t"

Do While Not WScript.StdIn.AtEndOfStream
   Line = WScript.StdIn.ReadLine()
   Line = TabobjRegEx.Replace(Line,Chr(34) & Chr(9) & Chr(34))
   Line = Chr(34) & Line & Chr(34)
   WScript.Stdout.WriteLine(Line)
Loop

现在您可以运行:

CSCRIPT /NOLOGO replace.vbs < YourFile.txt > NewFile.txt

注释:

  • RegExp表示正则表达式
  • Chr(34)表示双引号
  • Chr(9)表示TAB