我在重新排列 csv 文件的列(分隔符“;”)时遇到问题。我知道列应该在哪里,但不知道它们到底在哪里。
文件示例:
名;年龄;车辆
雅克;30岁;铃木
另一个文件示例:
车辆;notImportantColumn1;年龄;名;notImportantColumns2
铃木;不重要数据1; 30 ; 雅克 ;notImportantData2
--> 我想重新排列 csv 文件,因此我有:
年龄;名;车辆;所有不重要的列
30;雅克;铃木;所有不重要的数据
我试图检索变量中所需列的位置,如下所示
variable_age=$(awk -F ';' 'NR==1{ for (i=1;i<=NF;i++) if ($i == "age") print i }' file.csv)
...
然后使用 awk 重新排列它们
awk 'BEGIN {FS=";"; OFS=";"} {print $variable_age, ... }' file.csv
但正如我所担心的,“$variable_age”不是一个合适的参数
有人有想法吗?谢谢
答案1
使用磨坊主非常简单。运行
mlr --csv --fs ";" reorder -f age,first_name,vehicle ./input.csv >./output.csv
你将会拥有
+-----+------------+---------+---------------------+----------------------+
| age | first_name | vehicle | notImportantColumn1 | notImportantColumns2 |
+-----+------------+---------+---------------------+----------------------+
| 30 | Jacques | Suzuki | notImportantData1 | notImportantData2 |
+-----+------------+---------+---------------------+----------------------+