在unix中将带分隔符的字符串排序为字符串

时间:2013-06-28 11:11:21

标签: shell unix

我有以下格式的数据::

Info-programNumber!/TvSource/11100001_233a_32c0/13130^Info-channelName!5 USA^Info-Duration!1575190^Info-programName!CSI: ab cd

Delimiter = Info-

我尝试按升序对分隔符进行排序。但我的解决方案都没有起作用。

预期结果:

Info-channelName!5 USA^Info-Duration!1575190^Info-programName!CSI: ab cd^Info-programNumber!/TvSource/11100001_233a_32c0/13130

是否有任何命令允许我这样做或者我是否需要编写一个awk脚本来迭代字符串并对其进行排序?

2 个答案:

答案 0 :(得分:3)

暂时将信息拆分为多行,以便您进行排序:

tr ^ \\n | sort | tr \\n ^

注意:如果你有多个条目,你必须编写一个循环,每行处理它..使用庞大的数据集这可能不是一个好主意(太慢),在这种情况下选择一种编程语言..但你问的是贝壳......

答案 1 :(得分:0)

可以在awk中完成:

awk -F "^" '{OFS="^"; for (i=1; i<=NF; i++) a[i]=$i} 
          END {n=asort(a, b); for(i=1; i<=n; i++) printf("%s%s", b[i], FS); print ""}' file