这是我想写的简单的awk命令
grep "Inputs - " access.log | awk 'BEGIN { FS = "Inputs -" } ; { print $2 }'
我正在尝试使用"输入 - "来查找所有行的文件access.log。并尝试在"输入 - "之后唤醒该部分。这会出现以下错误
awk: syntax error near line 1
awk: bailing out near line 1
我很困惑这是什么问题,这应该有用!!!!
我也尝试了以下内容并且无效
grep "Inputs - " L1Access.log | awk -F='Inputs' '{print $1}'
以下是输入文本文件示例
This is line number 1. I dont want this line to be part of grep output
This is line number 2. I want this line to be part of grep output. This has "Input -", I want to display only the part after "Input -" from this line using awk
答案 0 :(得分:1)
既然你说你想要在第一个实例“输入 - ”之后的所有内容,并且因为你的grep是不必要的:
nawk -F"Inputs -" 'BEGIN {OFS="Inputs -"} {line=""}; { for(i=2;i<=NF;i++) line=line OFS $i} {print line}' test
您自己的答案只会打印出第二个元素。如果您有多个“输入 - ”,您将缺少剩余的线。如果您不想在输出中使用第二个(或第三个......)“输入 - ”,则可以使用:
nawk -F"Input -" '{ for(i=2;i<=NF;i++) print $i}' test
答案 1 :(得分:1)
你的问题无法在这里重现:
kent$ cat f
foo - xxx
foo - yyy
foo - zzz
fooba
kent$ grep 'foo - ' f| awk 'BEGIN { FS = "foo -"};{print $2}'
xxx
yyy
zzz
你的awk代码肯定有问题。此外,如果你想grep
和awk
在Inputs -
之后提取部分,你可以使用grep一次性完成:
kent$ grep -Po 'foo - \K.*' f
xxx
yyy
zzz
答案 2 :(得分:0)
好的伙伴们,我明白我的问题是什么。我正在使用solaris,而在solaris中awk没有正则表达式的能力,这意味着它不支持在字段分隔符中超过1个字符。所以我用了nawk
请参阅这篇文章 Stackoverflow post
grep "Inputs - " L1Access.log | nawk 'BEGIN { FS = "Inputs -" } { print $2 }'
这很有效。
答案 3 :(得分:0)
你不清楚要得到什么。这是一个示例文件:
cat file
test Inputs - more data
Here is nothing to get
yes Inputs - This is what we need Inputs - but what about this?
然后,您可以使用awk
获取数据:
awk -F"Inputs - " 'NF>1 {print $2}' file
more data
This is what we need
还是喜欢这个?
awk -F"Inputs - " 'NF>1 {print $NF}' file
more data
but what about this?
通过将分隔符设置为Inputs -
并测试NF>1
,它只会打印Inputs -