我需要在BufferedInputStream中包装Unix命令"tail -f".我不想像这个问题所说的那样模拟或模仿尾巴.相反,我想使用tail,等待它给我一个新的线.
好吧,所以在这里,我正在努力与这个awk代码,它应该模仿tail命令
num=$1;
{
vect[NR]=$0;
}
END{
for(i=NR-num;i<=NR;i++)
print vect[$i]
}
Run Code Online (Sandbox Code Playgroud)
所以我在这里尝试实现的是由awk模拟的tail命令,例如考虑cat somefile | awk -f tail.awk 10 shoud打印文本文件的最后10行,有什么建议吗?
如何使用head
和tail
在unix中选择从第二行到文件最后一行之前的行的行?
例如,如果我的文件有15行,我想选择2到14行.
I want to monitor a log file, when a new log message match my defined pattern (say contain “error”), then send out an email to me.
To do that, I wrote a python script monitor.py, the main part looks like:
import sys
for line in sys.stdin:
if "error" in line:
print line
Run Code Online (Sandbox Code Playgroud)
It works well when I use tail my.log | python monitor.py
, then I switch to tail -f my.log | python monitor.py
, then it doesn’t work, at …
我有以下数据帧dat
,它在一些行的开头呈现行特定数量的NA:
dat <- as.data.frame(rbind(c(NA,NA,1,3,5,NA,NA,NA), c(NA,1:3,6:8,NA), c(1:7,NA)))
dat
# V1 V2 V3 V4 V5 V6 V7 V8
# NA NA 1 3 5 NA NA NA
# NA 1 2 3 6 7 8 NA
# 1 NA 2 3 4 5 6 NA
Run Code Online (Sandbox Code Playgroud)
我的目标是删除每行开头的所有NA,并左移行值(相应地在移位行的末尾添加NA,以保持其长度不变).
以下代码按预期工作:
for (i in 1:nrow(dat)) {
if (is.na(dat[i,1])==TRUE) {
dat1 <- dat[i, min(which(!is.na(dat[i,]))):length(dat[i,])]
dat[i,] <- data.frame( dat1, t(rep(NA, ncol(dat)-length(dat1))) )
}
}
dat
Run Code Online (Sandbox Code Playgroud)
返回:
# V1 V2 V3 V4 V5 V6 V7 V8
# …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种类似的工具
tail -f /var/log/some.log | grep EVENT1 |rate
它不断显示事件的发生率.
有没有办法修改,以便tail -f
列出当前文件的行号.
类似的东西grep -n <Strings> *
.
问题:我有一个 CSV 转储文件 - 超过 250,000 行。当我使用时while read
- 需要一段时间(没有双关语)。我想回到最后 10,000 行来做我需要做的事情,而不是 250,000 行。
代码片段:我当前的代码是这样的:
IFS=","
while read line
do
awk_var=`echo "$line" | awk -F" " '{print $0}'`
var_array=($awk_var)
read -a var_array <<< "${awk_var}"
echo "${var_array[1]}"
done </some_directory/directory/file_in_question.csv
Run Code Online (Sandbox Code Playgroud)
问题:在阅读with bash 脚本时如何使用tail -n10000
with ?while read line
file_in_question.csv
我正在开发MEAN堆栈中的应用程序.我想在新图像上传到服务器时创建一个图像大小调整和裁剪脚本作为后台进程.
脚本在文件夹中监视新图像上传并裁剪它.
我更喜欢Linux shell脚本作为守护进程的方式.
我使用了以下想法来完成任务. - 在photolog.txt文件中写入服务器上的新图像上传,我可以逐行抓取图像. - 我在watch.sh shell脚本文件中读到了photolog.txt. - 它逐行迭代,直到达到EOL. - 再次新文件到达它将附加到EOL. - 我设法通过tail命令获取更新文件,并在命令行中显示最新的添加文件.这个代码很有魅力.
现在我成功获取服务器上新添加文件的图像列表.但主要的问题是我无法在变量中存储tail命令的输出,并且它必须对我来说因为我得到的任何输出都是文件名的完整路径,它将在imagemagick crop命令中使用.
Imagemagick中心裁剪与缩放图像.
convert -define file-type:size = widthxheight original_filename -thumbnail 120x120 ^ -gravity center -extent 100x100 resize_filename
watch.sh
#!/bin/bash
path="/var/www/html/AppBite/trunk/photolog.txt"
cat $path | \
until false
do
# If file exists
if [[ -f "$path" ]]
then
while IFS= read -r photo
do
imageFormat=`identify $photo | awk '{print $2}'`
imageScale=`identify $photo | awk '{print $3}'`
echo "$photo $imageFormat $imageScale"
done
fi
# Continous …
Run Code Online (Sandbox Code Playgroud) 我坚持尝试着色tail -f
输出,以便每个IP地址的IP地址颜色是唯一的.我通过搜索找不到任何东西.
这里有一些代码可以单独为当前的IP地址着色,但每个IP的颜色都是相同的颜色.
tail -f /var/www/domain.com/logs/global.log | egrep --color=auto '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}'
我希望每个IP地址都有一个独特的颜色.因此,您可以区分用户.
我试过了:
tail -f /var/www/domain.com/logs/global.log | GREP_COLOR='01;36' egrep --color -E '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}|$'
我正在尝试找出一种基于IP是什么来定义颜色的方法,但我不确定如何继续.
但迄今为止帮助不大.我在正确的路线上吗?干杯
感谢下面的帮助,这是一个有效的编译答案
# Color ip address only
tail -f /var/www/file | perl -pe 's/\d{1,3}\.\d{1,3}.(\d{1,3})\.\d{1,3}/\033[38;5;\1\2\3m$&\033[39m/g'
Run Code Online (Sandbox Code Playgroud)
# Color entire line
tail -f /var/file.log | perl -pe 's/^.*(\d{1,3})\.(\d{1,3}).(\d{1,3})\.(\d{1,3}).*$/\033[38;5;\2\2\3m$&\033[39m/g'
Run Code Online (Sandbox Code Playgroud)