Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/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
编辑awk命令以忽略特定线型_Awk - Fatal编程技术网

编辑awk命令以忽略特定线型

编辑awk命令以忽略特定线型,awk,Awk,我使用一个awk命令来过滤掉重复的行,我喜欢它的快速和干净。但是,我需要它忽略只包含加号的行(并且只包含-因为有些行包含+符号和其他内容,我确实希望它们仍然被检查是否重复),即+ 我可以使用额外的代码行和一些临时文件来实现这一点,但是。。 如何编辑此单行命令来执行此操作?所以我可以保持它干净和快速 当前代码过滤任何与另一个文件中任何地方的另一行重复的行,这很好,但是它可以忽略+行吗 代码如下: awk 'NR==FNR{a[$0]=1;next}!a[$0]' file2 file1 >

我使用一个awk命令来过滤掉重复的行,我喜欢它的快速和干净。但是,我需要它忽略只包含加号的行(并且只包含-因为有些行包含+符号和其他内容,我确实希望它们仍然被检查是否重复),即+

我可以使用额外的代码行和一些临时文件来实现这一点,但是。。 如何编辑此单行命令来执行此操作?所以我可以保持它干净和快速

当前代码过滤任何与另一个文件中任何地方的另一行重复的行,这很好,但是它可以忽略+行吗

代码如下:

awk 'NR==FNR{a[$0]=1;next}!a[$0]' file2 file1 > FilteredFile
文件1:

1234  
+      
adcs   
abba   
+  
542221   
+  
jabba   
文件2:

jingle  
1234      
+  
haad  
+    
rigor     
abba     
wiggle    
+  
542221     
jabba 
输出:

jingle  
+       
haad    
+  
rigor   
+     
wiggle  
编辑:因为OP添加了更多细节,所以现在就添加此解决方案

awk 'FNR==NR && $0!="+"{a[$0];next} !($0 in a)'  file1 file2


我不确定您为什么使用
FNR==NR
这是我们在读取2个或更多输入文件时的情况。因此,我假设您需要获得uniq值,同时删除其中包含
+
的行,如果我得到的正确,那么您可以尝试以下操作

awk '$0!="+" && !a[$0]++' Input_file
编辑:因为OP添加了更多细节,所以现在就添加此解决方案

awk 'FNR==NR && $0!="+"{a[$0];next} !($0 in a)'  file1 file2


我不确定您为什么使用
FNR==NR
这是我们在读取2个或更多输入文件时的情况。因此,我假设您需要获得uniq值,同时删除其中包含
+
的行,如果我得到的正确,那么您可以尝试以下操作

awk '$0!="+" && !a[$0]++' Input_file

对不起,这是我的错,我应该更清楚的问题,你是正确的,我正在阅读两个文件一次。为了澄清这一点,我已经更正了我的问题up@Giles,np,你能用fiels值样本和预期输出样本编辑你的帖子并让我们知道吗?我更喜欢你有
的时候/\+/作为模式的一部分---为什么要将其移动到动作中的
if
?根据OPs要求(
需要忽略只包含+符号和其他内容的行,因为有些行包含+符号和其他内容,我确实希望仍要检查它们是否重复)加号,即+
)条件需要是
$0=“+”
/[^+]/
或类似,而不是
/\+/。OP似乎在没有测试或思考的情况下匆忙接受答案-奇怪…@EdMorton,谢谢你让Ed知道,先生,现在更正了,非常感谢。我只看了一部分写得这么好的样本。或者我们可以像
那样写/^\+$/的时候/\+/作为模式的一部分---为什么要将其移动到动作中的
if
?根据OPs要求(
需要忽略只包含+符号和其他内容的行,因为有些行包含+符号和其他内容,我确实希望仍要检查它们是否重复)加号,即+
)条件需要是
$0=“+”
/[^+]/
或类似,而不是
/\+/。OP似乎在没有测试或思考的情况下匆忙接受答案-奇怪…@EdMorton,谢谢你让Ed知道,先生,现在更正了,非常感谢。我只看了一部分写得这么好的样本。或者我们可以像
那样写/^\+$/太IMHO?不清楚,请务必提及两个文件的样本以及预期输出的样本,并让我们知道。不清楚,请务必提及两个文件的样本以及预期输出的样本,并让我们知道。