我有一个文本文件,其中列号和行号总是不同的,并且只有当其中的每一列都等于 $VAR1 或 $VAR2 时,才想从 txt 文件中删除整行。例如:
假设 $VAR1="X" 和 $VAR2="N" 我想删除 $VAR1 和 $VAR2 构成整个列的任何行。
这将是我的输入:
hajn 32 ahnnd namm 5 543 asfn F
X X N X X X N X
5739 dw 32eff Sfff 3 asd 3123 1
这将是我想要的输出:
hajn 32 ahnnd namm 5 543 asfn F
5739 dw 32eff Sfff 3 asd 3123 1
我可以用一个循环来解决这个问题,但我想知道是否有一种强大的单线方法可以做到这一点,最好是 awk。
在这里,我们将值传输
$VAR1
到$VAR2
我们的短awk
脚本及其在命令行上使用a
的b
变量中。-v
在
awk
脚本内部,我们遍历每一行的字段,如果任何字段与 thea
和b
value 都不同,我们打印整行并立即继续下一行。如果没有字段与
a
和不同b
,则不会发生任何事情(不打印该行)。您可以通过正确选择正则表达式来获得所需的结果。注意:假设 shell 变量有平淡无奇的字符,这意味着那些不能解释为特殊的正则表达式。如果这不成立,那么您可以在
\Q...\E
上下文中覆盖变量。