gpt4 book ai didi

linux - 使用 awk 清理 csv 文件的标题

转载 作者:可可西里 更新时间:2023-11-01 11:48:31 29 4
gpt4 key购买 nike

我有一堆看起来像这样的 csv 文件:

Time,Channel A
(s),(V)

0.00000000,0.58058560
0.00666667,0.58913630
0.01333334,0.58058560

我想将其转换为:

Time (s),Channel A (V)
0.00000000,0.58058560
0.00666667,0.58913630
0.01333334,0.58058560

文件中的单位不一定相同(即可能有 (ms),(µV) 等)

我用 awk 'FNR!=3' 删除了空白行(始终是第 3 行),但删除了第二行参数并将它们粘贴到第一行字段后面超出了我的能力;(

请帮帮我!动机:有很多这样的文件。手工做是不可行的......

编辑:首先:感谢您帮助我。由于您的两个答案似乎存在相同的问题,我的文件中可能存在问题?我怀疑空行会以某种方式引起麻烦?

  • shell 脚本给我错误 'xpected empty line, read '
  • perl 脚本awk 脚本给我错误的第一行:

     (V) (s),Channel A
    0.00000000,0.58058560

如果有帮助,I uploaded a sample infile .

最佳答案

awk -F , -v RS='\r\n' 'FNR == 1 { x = $1; y = $2 } FNR == 2 { print x " " $1 "," y " " $2 } FNR > 3'

简要说明:awk 接受逻辑表达式作为范围模式(范围内的任何内容都可以使用,)因此 FNR == n 意味着该模式适用于行当前文件中的编号n;最后一个模式适用于第 3 行 之后的所有内容;省略操作意味着简单地将输入打印为已读。因此,第 1 行和第 2 行被特殊对待,每行都根据自己的含义进行处理,第 3 行被忽略,因为没有匹配的模式。

更新:根据@123 的建议编辑设置RS(记录分隔符)。另一种方法是将它包含在脚本本身中,可能连同 FS(字段分隔符),如下所示:

awk 'BEGIN { FS=","; RS="\r\n" } FNR == 1 { x = $1; y = $2 } FNR == 2 { print x " " $1 "," y " " $2 } FNR > 3'

关于linux - 使用 awk 清理 csv 文件的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44349394/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com