当不知道列的初始位置时如何重新排列列(UNIX,BASH)

当不知道列的初始位置时如何重新排列列(UNIX,BASH)

我在重新排列 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    |
+-----+------------+---------+---------------------+----------------------+

相关内容