У меня есть файл журнала с содержимым внутри. т. е. имя файла — Convert.20231010.log.
Содержимое внутри файла показано ниже
2024-05-17 00:14:02.447 Success ABCXYZ15 on hard disk
2024-05-17 00:14:02.447 Fail at /home/category1/sub1/ABCXYZ01 00054 is not found
2024-05-17 00:14:02.447 Success ABCXYZ16 00030 on hard disk
2024-05-17 00:14:02.447 Fail at /home/category1/sub2/ABCXYZ02 is not found
2024-05-17 00:14:02.447 Success ABCXYZ17 000110 on hard disk
Я хочу проверить файл и поработать над этим.
а) найти в журнале строку с условием «Сбой» и «не найдено». ", получите путь и имя файла.
grep -E 'Fail.*is not found' convert.20231010.log
найдены 2 строки с правильным условием
2024-05-17 00:14:02.447 Fail at /home/category1/sub1/ABCXYZ01 00054 is not found
2024-05-17 00:14:02.447 Fail at /home/category1/sub2/ABCXYZ02 is not found
b) выберите файл по пути и проверьте содержимое файла.
путь и имя файла будут выбраны из категории 2 на основе поиска на шаге a.
/home/category2/sub1/ABCXYZ01 00054
/home/category2/sub2/ABCXYZ02
c) переместите файл, если содержимое хорошее
На основании шага b прочитайте файлы содержимого «ABCXYZ01 00054» и «ABCXYZ02» . Если содержание хорошее, переместите файл в категорию3. Проверка содержимого внутри файла — «CARD», если она действительно имеет значение, то файл в порядке. Если поле «CARD» пустое или пустое, не перемещайте этот файл.
ID=ABCXYZ01 00054
NAME=JOIN
DEPT=ACC
CARD=1234
LOC=NY
ID=ABCXYZ02
NAME=CINDY
DEPT=LOG
CARD=6789
LOC=LA
mv -f '/home/category2/sub1/ABCXYZ01 00054' '/home/category3/sub1/'
mv -f '/home/category2/sub2/ABCXYZ02' '/home/category3/sub2/'
d) удалить строку в файле журнала
это удалит 2 строки в файле журнала на шаге a
sed -i '/Fail.*is not found/d' convert.20231010.log
Как мне использовать оболочку bash в Linux и записать новый журнал от шага от a до d? Я не знаком с оболочкой, благодарю за помощь.
#!/bin/bash
MYSELF=$0
MYNAME=`echo $0 | gawk '{print substr($0, match($0, /[^\/]+$/))}'`
MYNAME_NOEXT=`echo "$MYNAME" | gawk '{print gensub(/\.[^\.]*$/, "", "g")}'`
MYPATH=`echo $0 | gawk '{print substr($0, 1, match($0, /[^\/]+$/) - 1)}'`
if [ $MYPATH == "./" ]; then MYPATH="`pwd`/"; fi
cd $MYPATH
logfile="/home/category4/logs/"$MYNAME_NOEXT.`date +"%Y%m%d"`.log
(
if [ `ps -ef | grep -i "$MYNAME" | wc -l` -gt 4 ]
then
echo $(date +%Y-%m-%d) $(date +%H:%M:%S)" - Script '$MYNAME' is running. Force exit as re-entry not allowed."
exit
fi
filename="convert".`date +"%Y%m%d"`.log
while read -r line; do
linetext="$line"
echo "single line in log - $linetext"
done
echo $(date) " - Script '$MYNAME' is ended normally."
) >> $logfile 2>&1
Подробнее здесь: https://stackoverflow.com/questions/784 ... -that-line
Как можно извлечь одну строку данных из файла и другого процесса в каждой этой строке? ⇐ Linux
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Извлеките значения из каждой строки, соответствующей столбцу, и добавьте его в одну строку
Anonymous » » в форуме Python - 0 Ответы
- 1 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Извлеките значения из каждой строки, соответствующей столбцу, и добавьте его в одну строку
Anonymous » » в форуме Python - 0 Ответы
- 0 Просмотры
-
Последнее сообщение Anonymous
-