如何通过shell脚本对文件中的随机字符串进行排序

时间:2013-07-30 17:45:56

标签: bash shell unix awk cut

我随机拥有一个包含这些字符串的文件。如何水平排序并消除任何重复。

cat file
ticket-125788   ticket-126824    ticket-126957   ticket-126914
ticket-127220
ticket-125948                       ticket-126914

ticket-127030
ticket-127262
 ticket-127012  ticket-127022
ticket-127035


     ticket-126961
ticket-127024

Desired output:

ticket-125788 ticket-126824 ticket-126957 ticket-127220 ticket-125948 ticket-126914 ticket-127030 ticket-127262 ticket-127012 ticket-127022 ticket-127035 ticket-126961 ticket-127024

2 个答案:

答案 0 :(得分:2)

整个想法是grep每个«string»然后通过tr将其折叠为单行。

$> grep -P -o "[0-9a-z-]+" file | sort --unique | tr '\n' ' '
ticket-125788 ticket-125948 ticket-126824 ticket-126914 ticket-126957 ticket-126961 ticket-127012 ticket-127022 ticket-127024 ticket-127030 ticket-127035 ticket-127220 ticket-127262

答案 1 :(得分:1)

这样可以解决问题:

$ grep -o '\S*' file | sort -u | tr '\n' ' '
ticket-125788 ticket-125948 ticket-126824 ticket-126914 ticket-126957 ...
  • grep -o将每张票放在一个单独的行上。

  • sort -u对重复项进行排序和删除。

  • tr '\n' ' '将输出展平为单行。

或者使用xargs

$ xargs -n1 < file | sort -u | xargs
ticket-125788 ticket-125948 ticket-126824 ticket-126914 ticket-126957 ...