Добрый день. Я мог бы действительно использовать вашу помощь в этом. У меня есть текстовый файл статистики в следующем формате.

 ID=1000000 
 Name=Name1
 Field1=Value1 
 ...(Fields 2 to 25)
 Field26=Value26 

 ID=1000001
 Name=Name2
 Field1=Value1 
 ...(Fields 2 to 25) 
 Field26=Value26

 ID=1000002
 Name=Name2
 Field1=Value1 
 ...(Fields 2 to 25) 
 Field26=Value26 

 ...goes up to 15000

У меня есть текстовый файл активных людей, разделенных переносами строк.

 Name2
 Name5
 Name11
 Name12 
 ...goes up to 1400 Random Names

Мне нужно иметь возможность удалять записи из текстового файла статистики (ID, имя, поля с 1 по 26), если имя не найдено в текстовом файле активных людей. В приведенном выше примере соответствующая запись для Name1 (ID, Name, Fields1 to 26) должна быть удалена, поскольку ее нет в текстовом файле активных людей.

Я попытался переформатировать файл статистики через notepad++, используя TextFX-> Quick-> Find/Replace, чтобы преобразовать его в разделенный запятыми файл, в котором каждая запись отделяется разрывом строки. Я переставил

 ID       Name    Field1  ...Fields2 to Fields 25... Field26
 1000000  Name1   Value1  ...Value2 to Value 25...   Value26
 1000001  Name2   Value1  ...Value2 to Value 25...   Value26
 1000002  Name3   Value1  ...Value2 to Value 25...   Value26

Я открыл его с помощью Excel и создал две таблицы (таблица статистики и таблица активных имен) в MySQL, используя файл CSV-файла. Я не уверен, как обработать это в автоматической функции. Помимо удаления неактивных записей, другая проблема, которую я имею, переписывает это назад к его старому формату.

Я старался изо всех сил, чтобы понять это в течение нескольких часов подряд. Есть ли решение, которое не потребует от меня использования поиска, копирования, вставки и переключения между двумя файлами 1400 раз? Я открыт для использования различных методов / программ для упрощения процесса. К сожалению, я должен сохранить файл статистики в этом формате.

Я врезался в стену на этом. Пожалуйста помоги. Спасибо.

2 ответа2

1

Практически в любой системе BSD или Linux (я написал это для OS X) вы можете использовать следующий сценарий bash filter.sh:

#!/bin/bash
if [ ! -f "$1" ] ; then
    echo "First argument must be active users list file"
    exit 1
fi
while read line
do
    if [ "$( grep -E "^$( echo $line | cut -d' ' -f2 )$" "$1" )" ]  ; then
        echo $line
    fi
done

Сохраните исходный список активных пользователей как active.txt и измененный файл статистики stats.txt Сделайте файл filter.sh исполняемым с помощью chmod +x filter.sh и запустите его:

$ < stats.txt ./filter.sh active.txt | tee result.txt
1000001 Name2 Value1 ...Value2 to Value 25... Value26

Он будет печатать активные записи статистики в стандартный вывод и записывать их в result.txt .

0

Изменить: я неправильно истолковал часть о CSV в вопросе. Я только пытался обсудить выходную часть.


Excel не является парадигмой базы данных / набора записей. Вместо Excel вы можете использовать Access или запретить что-то вроде Base из OpenOffice ( http://www.openoffice.org/product/base.html ). Импортируйте файлы в виде таблиц, связывайте таблицы, делайте [magic], экспортируйте новые файлы.

В Access один безумный способ вывести файл - создать запрос, который строит нужную вам строку:

Select
"ID=" & [id] & chr(13) & chr(10) & 
"Name=" & [Name1] & chr(13) & chr(10) & 
( ... )
"Field26=" & [Value26] & chr(13) & chr(10) & 
FROM fooTable

Затем сохраните и экспортируйте в текстовый файл. Это создаст запрос с одним полем на запись. 13+10 - комбинация возврата каретки Windows +перевода строки.

Не элегантно

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .