这是我使用的代码,我想从一个文件中的4个日志文件中收集数据,然后对其进行排序并打印临时文件名。
#!/bin/bash
TEMPFILE=$(mktemp)
USER=$1
# Check for input
#if [ -z $1 ]; then echo "Give me one username or mail address please..."
# Fill file with user history
cat /var/log/messages | grep $USER >> $TEMPFILE
cat /var/log/maillog | grep $USER >> $TEMPFILE
zcat /var/log/messages*gz | grep $USER >> $TEMPFILE
zcat /var/log/maillog*gz | grep $USER >> $TEMPFILE
# Sort by date
cat $TEMPFILE | sort -k1M -k2n -k3n > $TEMPFILE
echo $TEMPFILE
答案 0 :(得分:0)
cat
和zcat
无处不在,您无法重定向到您正在阅读的同一个文件,这将为您提供一个0字节的文件。
试试这个:
#!/bin/bash
TEMPFILE=$(mktemp)
user="$1"
# Check for input
#if [ -z $1 ]; then echo "Give me one username or mail address please..."
# Fill file with user history
grep "$user" /var/log/messages >> $TEMPFILE
grep "$user" /var/log/maillog >> $TEMPFILE
zgrep "$user" /var/log/messages*gz >> $TEMPFILE
zgrep "$user" /var/log/maillog*gz >> $TEMPFILE
# Sort by date
sort -k1M -k2n -k3n "$TEMPFILE" > "$TEMPFILE.tmp"
mv "$TEMPFILE.tmp" "$TEMPFILE"
cat "$TEMPFILE"
PS:不要使用大写USER
作为变量运行,否则你将覆盖shell为此变量提供值。通常,不建议在脚本中使用所有大写变量。