Присвойте разность-y имена столбцов

Этот выходит, как только находит первое совпадение:

 tac hugeproduction.log | grep -m1 WhatImLookingFor

Ниже приведены 5 строк до и после первых двух совпадений:

 tac hugeproduction.log | grep -m2 -A 5 -B 5 WhatImLookingFor

Не забудьте использовать -i (нечувствителен к регистру), если только это не приведет к замедлению грепа.

Если вы знаете точную строку, которую ищете, то учтите fgrep (Исправленная строка)

 tac hugeproduction.log | grep -F -m2 -A 5 -B 5 'ABC1234XYZ'
1
19.06.2014, 17:53
1 ответ

Есть различные улучшения, которые вы можете внести в свой подход, но, сохраняя все то же самое, все, что вам нужно, это добавить еще одну строку в ваш сценарий, а затем вместо этого добавить последнюю строку ( >> ) of overwrite:

#!/bin/bash

echo -e "FileA\t\t\t\t\t\t\t\tFileB" > diff.txt
sort ~/Desktop/file1.txt > ~/Desktop/fileA.txt
sort ~/Desktop/file2.txt > ~/Desktop/fileB.txt
diff -y ~/Desktop/fileA.txt ~/Desktop/fileB.txt >> ~/Desktop/diff.txt

Лучше написать это

#!/usr/bin/env bash

file1="$1"
file2="$2"

printf "%-36s%36s\n" "FileA" "FileB"
diff -y <(sort "$file1") <(sort "$file2")

А затем запустить с:

script.sh file1.txt file2.txt > diff.txt

Это позволяет избежать создания ненужных временных файлов и не требует, чтобы имена файлов были жестко закодированы в скрипт.

В качестве альтернативы, если вы хотите, чтобы отображались фактические имена файлов, измените вызов printf выше на

printf "%-36s%36s\n" "$file1" "$file2"
3
27.01.2020, 23:28

Теги

Похожие вопросы