如何使用awk解析连续更改的文件?

如何使用awk解析连续更改的文件?

例如,如果我们有一个文件包含:

Hello world
Hello earth
Hi everybody

我们可以轻松地解析它以获取包含该单词的行的第一列和第二列,Hello使用awk

awk '/Hello/ { print $1 }' file
awk '/Hello/ { print $2 }' file

如果文件内容改变了怎么办:

Hello world
Hello earth
Hi everybody
Hello sky
Hi madame
Hello USA

我们如何只解析添加到该文件中的新条目(使用awk):

Hello sky
Hi madame
Hello USA

无需重新解析已解析的信息?

Hello world
Hello earth
Hi everybody

答案1

您可以使用两个文件:

if [ -e checkfile ]; then
  lines=$(wc -l <checkfile)
else
  lines=0
fi
# read all new lines from source file and append them to target file
sed -n $((lines+1)),\$p file >>checkfile
awk '...' checkfile

答案2

tail -f您可以通过(或)管道传输文件的内容,tail -F例如

tail -f file | awk '...'

tail手册页:

   -f, --follow[={name|descriptor}]
          output appended data as the file grows; -f, --follow, and --fol‐
          low=descriptor are equivalent

相关内容