首页 > 解决方案 > 将 CSV 转换为列分隔值,但将值放在最右边

问题描述

Concept 是一个运行 debian 的计算机,在检索数据时带有一个 SH 脚本文件。

我搜索了如何将数据从 csv 转换回列和行。这很容易。例如,我有这个:

在此处输入图像描述

并使用这个命令:column -t -s, >这会给我这个:

Date        SkyT_Min  SkyT_Min_Time  SkyT_Max  SkyT_Max_Time  SkyT_Mean  AmbT_Min  AmbT_Min_Time  AmbT_Max  AmbT_Max_Time
2019-09-19  -22.8     07:29:48.00    -1.6      12:27:57.00    -16.77     5.9       05:15:11.00    23.4      14:28:49.00  
2019-09-25  -15.8     11:49:40.00    9.1       20:17:11.00    1.07       14.7      02:47:10.00    21.7      11:46:38.00  
2019-09-26  -9.6      02:59:29.00    10.8      11:09:18.00    5.66       16.4      20:58:37.00    23.4      14:08:58.00  

所以总的来说这已经很棒了!

但是我如何让它让每列中的值从最右边开始,而不是从左边开始?所以我会得到这样的东西:

在此处输入图像描述

非常感谢您的回答。

更新:

我找到了我的问题的答案:

--R

但它给了我错误:“无效的选项 - 'R'

所以,如果有人有任何想法。:)

标签: shelldebiancat

解决方案


您可以使用 awk:

  • -F 告诉 awk 列分隔符
  • "%20s" 告诉 awk 为每列保留 20 个字符,并将空格连接到每个条目
awk -F "," '{for(i=1;i<=NF;i++){printf "%20s ", $i}; printf "\n"}' inputfile.csv

输出:

                Date             SkyT_Min        SkyT_Min_Time             SkyT_Max        SkyT_Max_Time            SkyT_Mean             AmbT_Min        AmbT_Min_Time             AmbT_Max        AmbT_Max_Time 
          2019-09-19                -22.8          07:29:48.00                 -1.6          12:27:57.00               -16.77                  5.9          05:15:11.00                 23.4          14:28:49.00 
          2019-09-25                -15.8          11:49:40.00                  9.1          20:17:11.00                 1.07                 14.7          02:47:10.00                 21.7          11:46:38.00 
          2019-09-26                 -9.6          02:59:29.00                 10.8          11:09:18.00                 5.66                 16.4          20:58:37.00                 23.4          14:08:58.00

PS:以后请不要截图,因为没人喜欢


推荐阅读