首页 > 解决方案 > 如何使用 sed 和/或 awk 按照动态格式重新排序文件中每一行的元素

问题描述

我目前有一个文件,每一行都包含有序数据。例如:

Peter:Connor:14:40kg
George:Head:56:60kg

我有一个列表函数,它以“格式”字符串为参数。该字符串包含表示列表中每个可能元素的缩写。在此示例中,缩写为:

%N, %S, %A, %W

这些缩写可以在任何数量的字符之前或之后。

我想打印数据,使其适合接收到的字符串格式,用列表中的相应元素替换每个缩写。例如,我可能会收到:

{%A} [%W] %S %N

或者

%S|%N|%A[[%W]]

而且我需要重新排序数据,使其符合要求的格式。因为它是函数中的一个参数,所以我无法事先知道我会收到什么。

{14} [40kg] Connor Peter

对于第二个例子

Connor|Peter|14[[40kg]]

我怎样才能使用 awk 来做到这一点?

标签: bashawk

解决方案


awk 'BEGIN{FS=":"; OFS=" "}{print "{"$3"}","["$4"]",$2,$1}' inputFile

给出:

{14} [40kg] Connor Peter
{56} [60kg] Head George

awk 'BEGIN{FS=":"; OFS="|"}{print $2,$1,$3"[["$2"]]"}' inputFile

产量

Connor|Peter|14[[Connor]]
Head|George|56[[Head]]

推荐阅读