编辑awk命令以忽略特定线型
我使用一个awk命令来过滤掉重复的行,我喜欢它的快速和干净。但是,我需要它忽略只包含加号的行(并且只包含-因为有些行包含+符号和其他内容,我确实希望它们仍然被检查是否重复),即+ 我可以使用额外的代码行和一些临时文件来实现这一点,但是。。 如何编辑此单行命令来执行此操作?所以我可以保持它干净和快速 当前代码过滤任何与另一个文件中任何地方的另一行重复的行,这很好,但是它可以忽略+行吗 代码如下:编辑awk命令以忽略特定线型,awk,Awk,我使用一个awk命令来过滤掉重复的行,我喜欢它的快速和干净。但是,我需要它忽略只包含加号的行(并且只包含-因为有些行包含+符号和其他内容,我确实希望它们仍然被检查是否重复),即+ 我可以使用额外的代码行和一些临时文件来实现这一点,但是。。 如何编辑此单行命令来执行此操作?所以我可以保持它干净和快速 当前代码过滤任何与另一个文件中任何地方的另一行重复的行,这很好,但是它可以忽略+行吗 代码如下: awk 'NR==FNR{a[$0]=1;next}!a[$0]' file2 file1 >
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知道,先生,现在更正了,非常感谢。我只看了一部分写得这么好的样本。或者我们可以像那样写/^\+$/对不起,那是我的错,我应该更清楚地回答这个问题,你是对的,我一次读了两个文件。为了澄清这一点,我已经更正了我的问题up@Giles,np,你能用fiels值样本和预期输出样本编辑你的帖子并让我们知道吗?我更喜欢你有的时候/\+/代码>作为模式的一部分---为什么要将其移动到动作中的if
?根据OPs要求(需要忽略只包含+符号和其他内容的行,因为有些行包含+符号和其他内容,我确实希望仍要检查它们是否重复)加号,即+
)条件需要是$0=“+”
或/[^+]/
或类似,而不是/\+/代码>。OP似乎在没有测试或思考的情况下匆忙接受答案-奇怪…@EdMorton,谢谢你让Ed知道,先生,现在更正了,非常感谢。我只看了一部分写得这么好的样本。或者我们可以像那样写/^\+$/代码>太IMHO?不清楚,请务必提及两个文件的样本以及预期输出的样本,并让我们知道。不清楚,请务必提及两个文件的样本以及预期输出的样本,并让我们知道。