AWK unix命令

时间:2017-12-13 17:33:05

标签: unix awk

我一直在搜索,我对这个awk命令有些怀疑。 任何人都可以帮忙做什么?

awk -F'\" ' '$2~/^5/' /home/app/log/app_log_20171202.out

我认为它搜索日志文件中的字符串,但我不理解它搜索的模式。

3 个答案:

答案 0 :(得分:0)

您的awk行执行以下操作:

awk -F'\" ' '$2~/^5/'

  • -F'\" ':将字段分隔符设置为'" '(带空格的双引号)
  • $2~/^5/是撰写($2~/^5/)1的简短表格,甚至是($2~/^5/){print $0}的简称,应该被理解为if ($2~/^5/) is true then print $0
  • 正则表达式为$2~/^5/,并声明如果带分隔符"的第二个字段(请参阅-F'\")以5(/^5/)开头,则返回true。

因此,简而言之,您的命令将打印所有行,其中第一个用引号括起的字符串以5开头。

答案 1 :(得分:0)

这是我的猜测。

打破它。 awk -F'\'''$ 2~ / ^ 5 /'/ home / app / log / app_log_20171202.out

awk命令

-F'\“'use”,空格作为字段分隔符。

'$ 2~ / ^ 5 /'应用于输入文件的awk系列模式和动作

$ 2返回第二项

〜匹配要遵循的模式

/ ^ 5 /匹配一个5

的字符

/home/app/log/app_log_20171202.out输入文件。

以下是一些使用echo和管道而不是输入文件的示例。

这将返回该行。

echo "VM\" 5ID: 12345" | awk -F'\" ' '$2~/^5/' -
VM" 5ID: 12345

这些没有任何回报。

echo "VM\" 4ID: 12345" | awk -F'\" ' '$2~/^5/' -
echo "VM\"5ID: 12345" | awk -F'\" ' '$2~/^5/' -

答案 2 :(得分:0)

使用一些示例和简化代码进行说明:

$ cat abc
contains 2 " contains 5 " contains 10 " contains 100
$ 

打印第二个字段

$ awk -F'\" ' '{print $2 }' abc
contains 5 

如果第二个字段包含5

,则打印第二个字段
$ awk -F'\" ' '$2 ~ /5/ { print $2 }' abc        
contains 5 

如果以5

开头,则打印第二个字段
$ awk -F'\" ' '$2 ~ /^5/ { print $2 }' abc
$

修改文件以开始编号为5的第二个字段

$ cat abc
contains 2 " 5 is the first number " contains 10 " contains 100
$ awk -F'\" ' '$2 ~ /^5/ { print $2 }' abc
5 is the first number 
$ 

如果第二个字段以数字5开头,则打印整行


$ awk -F'\" ' '$2 ~ /^5/ { print }' abc   
contains 2 " 5 is the first number " contains 10 " contains 100
$

与上述相同


$ awk -F'\" ' '$2 ~ /^5/' abc          
contains 2 " 5 is the first number " contains 10 " contains 100
$