使用Awk从$3-2在200到400之间的文件中提取行。
我正在使用的命令:
awk '{ if ($3 - $2 > 199 && < 401) print $0}' Input_File错误消息:
awk: syntax error at source line 1
context is
{ if ($3 - $2 > 199 && >>> < <<< 401) print $0}
awk: illegal statement at source line 1如果我只使用一个参数(例如awk '{ if ($3 - $2 > 199) print $0}' Input_File ),但当我使用&&时,该命令就不能工作。我该怎么解决这个问题?
示例Input_File:
A 1000 1500
B 1000 1300
C 1000 1100
D 1000 1200期望输出的示例:
B 1000 1300
D 1000 1200发布于 2020-11-16 15:25:12
你在&&之后的情况是不完全的。你可以用:
awk '$3-$2 > 199 && $3-$2 < 401' file
B 1000 1300
D 1000 1200发布于 2020-11-16 15:22:52
您可以创建一个与第3列和第2列不同的变量,然后在条件下使用它。
awk '{ val=($3 - $2);if ( val > 199 && val < 401) print $0}' Input_File为什么OP的尝试是错误的:OP使用的是if ($3 - $2 > 199 && < 401),这是错误的,因为第3列和第2列没有提到2次(在&&之后,在< 401之前),对于每个条件(或者用OR/和条件分隔),应该分别提到。所以应该是:if (($3 - $2 > 199) && ($3 - $2 < 401))。IMHO使变量更好地避免得到2次差异,将差异一次放入变量中,并在不同的条件下使用。
发布于 2020-11-16 17:44:57
如果你不想重复计算,你可以这样做
$ awk '(d=$3-$2)>199 && d<401' filehttps://stackoverflow.com/questions/64860691
复制相似问题