例如,如果我们有一个文件包含:
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