Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Linux 按相反顺序删除重复的单词对_Linux_Bash_Awk_While Loop - Fatal编程技术网

Linux 按相反顺序删除重复的单词对

Linux 按相反顺序删除重复的单词对,linux,bash,awk,while-loop,Linux,Bash,Awk,While Loop,我有一个类似以下示例的文件: cat dog mouse cat dog cat dog mouse 我想要的是删除那些包含相同单词但顺序相反的行,在这种情况下,我想要“catdog”而不是“dogcat”。在真实的文件中,我有大量的单词对(交互),我想删除冗余(我正在处理单向交互)。因此,我希望这样做: cat dog mouse cat dog mouse 我尝试了此操作,但未返回任何结果: cat file | while read f1 f2; do awk -F" " '($1==

我有一个类似以下示例的文件:

cat dog
mouse cat
dog cat
dog mouse
我想要的是删除那些包含相同单词但顺序相反的行,在这种情况下,我想要“catdog”而不是“dogcat”。在真实的文件中,我有大量的单词对(交互),我想删除冗余(我正在处理单向交互)。因此,我希望这样做:

cat dog
mouse cat
dog mouse
我尝试了此操作,但未返回任何结果:

cat file | while read f1 f2; do awk -F" " '($1==$f2) && ($2==$f1)' file; done
在这段代码中,我只想找到重复的对。要删除重复,我会这样做:

cat file | while read f1 f2; do awk -F" " '($1!=$f2) && ($2!=$f1)' file; done

下面的
awk
可能会对您有所帮助

awk '{b[$1,$2]} !($2,$1) in b' Input_file

下面的
awk
可能会对您有所帮助

awk '{b[$1,$2]} !($2,$1) in b' Input_file

常见的惯用解决方案:

$ awk '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
cat dog
mouse cat
dog mouse

常见的惯用解决方案:

$ awk '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
cat dog
mouse cat
dog mouse


我想要“猫狗”而不是“狗猫”为什么不反过来呢?事实上,这并不重要。我想要“猫狗”或“狗猫”,但不是两者。我想要“猫狗”而不是“狗猫”。为什么不反过来呢?事实上,这并不重要。我想要“catdog”或“dogcat”,但不是这两个。Bash返回一个错误:“语法错误在或附近”。请尝试使用一组额外的参数,如:
”{b[$1,$2]}!(($2,$1)在b)
@jas我删除了我自己的答案,因为你知道哈希表的正确位置+这一个是1。@Swimmingbird,您能告诉我删除这一个正确答案的原因吗?那么我可以试着改进这一个吗?另一个答案花费的时间更少,尽管事实上,这两个答案都很好。Bash返回一个错误:“语法错误在或接近”。尝试使用一组额外的参数,如:
“{b[$1,$2]}!(($2,$1)在b)
@jas我删除了我自己的答案,因为你知道哈希表的正确位置+这一个是1。@Swimmingbird,您能告诉我删除这一个正确答案的原因吗?那么我可以试着改进这一个吗?另一个答案需要更少的时间,尽管事实上,这两个答案都很好。。我看不出这个问题的价值,给出的答案已经被问了很多次,回答了很多次,但我不是专家。我很惊讶几百个可能重复的问题都没有给出答案。当有人发布一个awk问题时,我有两个选择:1)搜索档案,看看以前是否有人问过类似的问题,如果有,提供给该问题的任何答案是否是实际的正确答案,如果是这样,但正确的答案不是公认的答案(频繁!)请决定我是否真的想将此问题标记为该问题的重复,这意味着我实际上是在引导人们找到错误的答案,还是2)发布正确的解决方案。选项2对我来说要容易得多,如果选项1对我来说很难,我只能想象对初学者来说有多难。这是简单的经济学。提供答案比做工作更有利可图。这让OP认识到,提出问题而不是做工作是有益的。从更大的角度来看,它让网站充斥着无用的垃圾。这是1000刀的死亡。这就是为什么会有数百个类似的问题。不,这与利润无关,一切都与时间有关。我有时间发布一个微不足道的正确解决方案。我没有时间在网站上搜索与其他问题的答案相同的解决方案。因此,考虑到我愿意花多少时间,我的选择是回答还是忽略这个问题,我认为回答这个问题比忽略它更有帮助,所以这通常是我选择做的。如果其他人有时间在档案中搜索相同的解决方案,并以dup的身份结束问题,那么他们将获得更多的权力。只有当人们关心涉及的货币时,经济模型才适用。在某些网站上很难关注价值较低的分数。如果我们谈论的是美元或欧元之类的东西,那么我可能会在意。我回答的问题一点也不离题,因此结束这些问题对任何人都没有帮助,我想大多数人参与其中是为了帮助他人,而不是收集毫无意义的分数。尽管如此,做你喜欢做的事-我对我的方法很在行,谢谢。。我看不出这个问题的价值,给出的答案已经被问了很多次,回答了很多次,但我不是专家。我很惊讶几百个可能重复的问题都没有给出答案。当有人发布一个awk问题时,我有两个选择:1)搜索档案,看看以前是否有人问过类似的问题,如果有,提供给该问题的任何答案是否是实际的正确答案,如果是这样,但正确的答案不是公认的答案(频繁!)请决定我是否真的想将此问题标记为该问题的重复,这意味着我实际上是在引导人们找到错误的答案,还是2)发布正确的解决方案。选项2对我来说要容易得多,如果选项1对我来说很难,我只能想象对初学者来说有多难。这是简单的经济学。提供答案比做工作更有利可图。这让OP认识到,提出问题而不是做工作是有益的。从更大的角度来看,它让网站充斥着无用的垃圾。这是1000刀的死亡。这就是为什么会有数百个类似的问题。不,这与利润无关,一切都与时间有关。我有时间发布一个微不足道的正确解决方案。我没有时间在网站上搜索与其他问题的答案相同的解决方案。因此,考虑到我愿意花多少时间,我的选择是回答还是忽略这个问题,我认为回答这个问题比忽略它更有帮助,所以这通常是我选择做的。如果其他人有时间在档案中搜索相同的解决方案,并以dup的身份结束问题,那么他们将获得更多的权力。只有当人们关心涉及的货币时,经济模型才适用。这很难让人关心