我有一堆看起来像这样的 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/