【发布时间】:2020-03-21 07:07:42
【问题描述】:
我看过很多关于根据列对文件进行排序的帖子,但对我没有帮助。
我只想根据第 2 列对 CSV 文件进行排序。
例如:我文件中的数据如下所示
H1,H2,H3,H4
C11,R_G,S_F_G,22-OCT-2019
C12,R_G,S_F_G,22-OCT-2019
C13,R_E,S_F_E,22-OCT-2019
C13,R_E,S_F_E_RA,22-OCT-2019
C13,R_E,S_F_E_RB,22-OCT-2019
C14,R_E,S_F_E,22-OCT-2019
C14,R_E,S_F_E_RA,22-OCT-2019
C14,R_E,S_F_E_RB,22-OCT-2019
第 2 列的预期排序顺序如下所示
H1,H2,H3,H4
C13,R_E,S_F_E,22-OCT-2019
C13,R_E,S_F_E_RA,22-OCT-2019
C13,R_E,S_F_E_RB,22-OCT-2019
C14,R_E,S_F_E,22-OCT-2019
C14,R_E,S_F_E_RA,22-OCT-2019
C14,R_E,S_F_E_RB,22-OCT-2019
C11,R_G,S_F_G,22-OCT-2019
C12,R_G,S_F_G,22-OCT-2019
我尝试使用以下命令进行排序
awk 'NR==1; NR > 1 {print $0 | "sort -t, -k2"}' inputfile >> outputfile
结果如下
H1,H2,H3,H4
C13,R_E,S_F_E,22-OCT-2019
C14,R_E,S_F_E,22-OCT-2019
C13,R_E,S_F_E_RA,22-OCT-2019
C14,R_E,S_F_E_RA,22-OCT-2019
C13,R_E,S_F_E_RB,22-OCT-2019
C14,R_E,S_F_E_RB,22-OCT-2019
C11,R_G,S_F_G,22-OCT-2019
C12,R_G,S_F_G,22-OCT-2019
如果您观察结果,第 2 列和第 3 列正在排序,但我只希望对第 2 列进行排序,如果第 2 列与 2 行相同,则它应该按照输入文件中出现的顺序排列。
如果有人能帮助我理解我做错了什么,那就太好了
【问题讨论】:
-
glen Jackman 的回答太棒了unix.stackexchange.com/q/345076/273492
-
ts 不重复 @RaviSaroch 我希望仅根据第 2 列进行排序。如果第 2 列中的 2 行相同,则应按输入文件中的出现顺序排列。我已经尝试过您提到的解决方案。感谢您的宝贵时间。
-
@Raj 你见过这个答案stackoverflow.com/a/59041272/757714 吗?不好吗?为什么?谢谢
-
@aborruso 由于管理员限制,我将无法安装。即使我在获得批准后安装在我的开发机器中,将其安装在我的生产服务器中也是一项艰巨的工作,因为其中涉及很多批准过程。