Обработка данных между файлами различий в Linux

В то время как другие ответы могут помочь, вот как я делаю то же самое:

  • Shift + выделение текста курсором.
  • Ctrl + Shift + C, чтобы скопировать текст в буфер обмена.
-1
19.04.2020, 11:08
3 ответа

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

diff -y Attendance Position | grep YES > newfile

Это отобразит оба файла рядом, отобразив только строки с YES, и отправит вывод в новый файл

0
19.03.2021, 02:27

Ваша интуиция верна, grepво-первых, для всех солдат с атрибутом Да -. Затем извлеките имя с помощью awkи заполните его массивом или вторым grep. Извлечение имен не так уж сложно (, если имя файла Attendance):

<Attendance grep 'Yes' | awk '{print $2}'

Теперь это зависит от того, насколько велик результирующий набор. Если это дает <50 имен для поиска, вы можете просто поместить результат в качестве параметров для следующего grep в файле Position -. Если их намного больше, чем количество параметров командной строки, поддерживаемых вашей оболочкой, напишите небольшой скрипт (Bash -). Поместите куски имен в массив и переберите все прочитанные строки, чтобы найти совпадения.

С более чем 10 000 записей в журнале, работайте поблочно, так (также включая другие комментарии, как файл сценария Bash):

#!/bin/bash

declare -A position

# build up a hash table through preformatted Bash-statements
while read i; do
    eval "$i"
done < <(awk '{print "position['\''"$2"'\'']='\''"$3"'\''"}' Position)

echo "read ${#position[@]} positions"

# Lookup positions from the hash table
while read name; do
    pos="${position[$name]}"
    if [ -z "$pos" ]; then
        pos="-"
    fi
    echo "$name $pos"
done < <(awk '/YES/ { print $2 }' Attendance)

Это не будет работать правильно, если ваше имя содержит пробелы, например. разделить фамилию и имя, звания, звания и тому подобное. Поскольку вам нужно больше атрибутов, а также какое-то приближение расстояния и времени — возможно, не у каждого солдата есть точная позиция для данной временной метки — я предлагаю заплатить разработчику.

Вы также можете расширить атрибут ключа -для позиции хэш-таблицы для хранения и последующего поиска записей.

1
19.03.2021, 02:27

Попробуйте также

grep YES file1 | cut -f2 -d" " | grep -f- file2
0
19.03.2021, 02:27

Теги

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