【发布时间】:2017-08-17 17:57:32
【问题描述】:
我有一个包含 5 列数据的 csv 文件,我需要重新排列这些列以使运动员列排在第一位,然后这里的所有其他列都是名为 Final.csv 的原始 csv 文件
我粘贴了 libreoffice 的输出,所以这个输出没有逗号,看起来像一个 tsv 文件,但它是一个 csv 文件
Trialtime type Track time Athlete
20170101 07:15:00 Warmup ABC 85.2 Jon
20170101 07:45:00 Sprint1 ABC 59.44 Jon
20170101 08:30:00 TRIAL ABC 57.21 Jon
20170101 08:00:00 Warmup ABC 120.51 Bill
20170101 08:40:05 Sprint1 ABC 61.35 Bill
20170101 09:15:00 Sprint2 ABC 60.08 Bill
20170101 10:30:00 TRIAL ABC 60.37 Bill
20170101 07:15:00 Warmup ABC 85.2 Jon
20170101 07:45:00 Sprint1 ABC 59.44 Jon
20170101 08:30:00 TRIAL ABC 57.21 Jon
20170101 08:00:00 Warmup ABC 120.51 Bill
20170101 08:40:05 Sprint1 ABC 61.35 Bill
20170101 09:15:00 Sprint2 ABC 60.08 Bill
20170101 10:30:00 TRIAL ABC 60.37 Bill
我想先让 athelete coulmn 因为我使用这个 awk 命令
awk -F, '{print $5,$1,$2,$3,$4}' OFS=, Final.csv > add.csv
它可以重新排列列,但是使数据像这样乱码
如您所见,不知何故有一个额外的字段出现在顶部并使数据无法使用
Athlete
Trialtime type Track time
Jon
20170101 07:15:00 Warmup ABC 85.2
Jon
20170101 07:45:00 Sprint1 ABC 59.44
Jon
20170101 08:30:00 TRIAL ABC 57.21
Bill
20170101 08:00:00 Warmup ABC 120.51
Bill
20170101 08:40:05 Sprint1 ABC 61.35
Bill
20170101 09:15:00 Sprint2 ABC 60.08
Bill
20170101 10:30:00 TRIAL ABC 60.37
我完全不知道这里出了什么问题我已经在这里做了大约 4 个小时了,我认为我做的一切都是正确的,但是为什么会有额外的空间呢?
【问题讨论】:
-
文件是否来自 Windows?尝试在使用
awk处理之前删除带有sed -i '' 's/\r//' file的 Windows 行结尾。 -
不,我使用的是 ubuntu 16.04
-
你可以试试
sed命令吗?当其中没有 Windows 行尾时,它不会造成伤害 -
我不知道如何处理,我听说 awk 更好,这就是我尝试过的
-
请尝试
sed 's/\r//' Final.csv | awk -F, '{print $5,$1,$2,$3,$4}' OFS=,。有用吗?