Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 排序和删除行中的重复单词_Bash_Sorting - Fatal编程技术网

Bash 排序和删除行中的重复单词

Bash 排序和删除行中的重复单词,bash,sorting,Bash,Sorting,sort命令允许我按字母顺序放置行并删除重复行。我需要类似的东西,可以在一行字排序,把他们的顺序,并删除任何重复。有这个命令吗 例如: 更改: ant spider zebra 第一个单词前或最后一个单词后没有空格。这对我来说很有用: $ echo "zebra ant spider spider ant zebra ant" | xargs -n1 | sort -u | xargs ant spider zebra 您可以使用xargs-n1将单行中的单词列表转换为单列,使用sort-u

sort
命令允许我按字母顺序放置行并删除重复行。我需要类似的东西,可以在一行字排序,把他们的顺序,并删除任何重复。有这个命令吗

例如:

更改:

ant spider zebra
第一个单词前或最后一个单词后没有空格。

这对我来说很有用:

$ echo "zebra ant spider spider ant zebra ant" | xargs -n1 | sort -u | xargs
ant spider zebra

您可以使用
xargs-n1
将单行中的单词列表转换为单列,使用
sort-u
并使用
xargs
转换回单行,使用
tr
将空格更改为新行,然后使用
sort
,最后将新行更改回空格

echo $(tr ' ' '\n' <<< "zebra ant spider spider ant zebra ant" | sort -u)
echo$(tr'''\n'使用
python

使用
perl

perl -lane '
  %a = map { $_ => 1 } @F;
  print join qq[ ], sort keys %a;
' <<< "zebra ant spider spider ant zebra ant"
使用
awk

awk'{for(i=1;i构建shell是为了解析
[:blank:]
已分离的单词列表。因此,使用xargs是完全多余的。可以完成“唯一”的工作,但使用排序更简单


echo$(printf'%s\n'zebra ant spider ant spider ant zebra ant | sort-u)

在此之前的所有答案一次只能对一行进行排序。 以下内容可用于将此类行的整个列表导入,并将打印每行唯一单词的排序列表

awk '{ delete a; for (i=1; i<=NF; i++) a[$i]++; n=asorti(a, b); for (i=1; i<=n; i++) printf b[i]" "; print "" }'

awk'{删除一个;用于(i=1;我接受的答案使用了3个管道,但这一个只使用了1。+1我喜欢这个答案。你能扩展对“echo”的需求吗?你能不能这样做:
printf'%s\n'zebra ant蜘蛛ant蜘蛛ant zebra ant | sort-u
啊。我想出来了。这是为了把它们重新放到一个字符串中,而不是多行。我会在下一页留下我的评论。)erson没有立即找到答案。比使用printf更好。但是可以在末尾删除额外的tr。+1很好,但会在每行中添加一个悬空;可以通过将最后一个循环更改为
for(i=1;i)来修复
perl -lane '
  %a = map { $_ => 1 } @F;
  print join qq[ ], sort keys %a;
' <<< "zebra ant spider spider ant zebra ant"
ant spider zebra
awk '{for(i=1;i<=NF;i++) a[$i]++} END{for(i in a) printf i" ";print ""}' INPUT_FILE
[jaypal:~/Temp] cat file
zebra ant spider spider ant zebra ant
[jaypal:~/Temp] awk '{for (i=1;i<=NF;i++) a[$i]++} END{for (i in a) printf i" ";print ""}' file
zebra spider ant 
awk '{ delete a; for (i=1; i<=NF; i++) a[$i]++; n=asorti(a, b); for (i=1; i<=n; i++) printf b[i]" "; print "" }'
>cat file
group label wearable edit_group edit_group_order label_max camera_elevation camera_distance name label_min label_max value_min value_max camera_angle camera_elevation id
id group label wearable edit_group clothing_morph value_min value_max name value_default clothing_morph group
id label show_simple wearable name edit_group edit_group_order group clothing_morph clothing_morph camera_distance label_min label_max value_min value_max camera_distance camera_angle
id group label wearable name edit_group clothing_morph value_min value_max value_default
group label wearable id clothing_morph edit_group edit_group_order label_min label_max value_min value_max name camera_distance camera_angle camera_elevation
id group label wearable edit_group name label_min label_max value_min value_max wearable
name id group wearable edit_group id group wearable id group wearable id group wearable value_min value_max

>cat file | awk '{ delete a; for (i=1; i<=NF; i++) a[$i]++; n=asorti(a, b); for (i=1; i<=n; i++) printf b[i]" "; print "" }'
camera_angle camera_distance camera_elevation edit_group edit_group_order group id label label_max label_min name value_max value_min wearable 
clothing_morph edit_group group id label name value_default value_max value_min wearable 
camera_angle camera_distance clothing_morph edit_group edit_group_order group id label label_max label_min name show_simple value_max value_min wearable 
clothing_morph edit_group group id label name value_default value_max value_min wearable 
camera_angle camera_distance camera_elevation clothing_morph edit_group edit_group_order group id label label_max label_min name value_max value_min wearable 
edit_group group id label label_max label_min name value_max value_min wearable 
edit_group group id name value_max value_min wearable