Извлекать, сортировать и сохранять данные из нескольких файлов в один

260
zaonline

У меня есть несколько .sieфайлов,

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

Вот пример содержимого файлов:

#FLAGGA 0 #PROGRAM "ISUPOS Kassa 3" 3.1.129 #FORMAT PC8 #GEN 20180119 #SIETYP 4 #FNAMN "Café" #VER "" "1" 20180113 "Z-Dagrapport #1, Kassa #1 2018-01-13" { #TRANS 1910 {} 819.00 #TRANS 1920 {} 1334.00 #TRANS 1930 {} 438.00 #TRANS 2620 {} -277.61 #TRANS 3052 {} -2313.39 } 

Это из одного файла. Некоторые файлы могут содержать или не содержать все #TRANSстроки.

Я хотел бы, чтобы "большой файл" имел одну строку для каждого файла, например

2018-01-13 819 1334.00 438.00 -277.61 -2313.39 

если одна из #TRANSзаписей отсутствует, 0вместо нее должен быть (ноль).

Я попытался с sedи, awkно я не могу добиться того, чего я хочу. Следующим шагом является импорт большого файла в Excel.

0
Обратите внимание, что https://superuser.com не является бесплатным сервисом для написания скриптов / кодов. Если вы сообщите нам, что вы уже пробовали (включая скрипты / код, который вы уже используете) и где вы застряли, мы можем попытаться помочь с конкретными проблемами. Вам также следует прочитать [Как мне задать хороший вопрос?] (Https://superuser.com/help/how-to-ask). DavidPostill 5 лет назад 0
Что означает «если * одна * транс-запись отсутствует» означает? Это только те 5 «ключей» (1910,1920,1930,2620,3052)? glenn jackman 5 лет назад 0
@DavidPostill Я застрял во всем. Мне удалось извлечь интересующие меня поля из одного файла. Но мне не удается получить данные из одного файла в одной строке и следующего файла во второй строке, отсортированные и упорядоченные по дате. zaonline 5 лет назад 0
@glennjackman В некоторых файлах меньше записей. например, 1920, 1930, 2620, 3052, но не 1910. В этих случаях это должен быть ноль вместо отсутствующей записи. zaonline 5 лет назад 0
@DavidPostill Есть ли более подходящий сайт для таких вопросов, о которых вы знаете? zaonline 5 лет назад 0

1 ответ на вопрос

1
Sasha Golikov

Эта простая программа awk будет искать во входном файле определенные номера #TRANS и помещать их в таблицу. Если одна или более #TRANS отсутствуют, то в будет ноль.

awk ' BEGIN{ for(i=1;i<=6;i++){ o[i]=0 } } /#VER/ { date=$4; o[1]=substr(date,0,4)"-"substr(date,5,2)"-"substr(date,7,2); } /#TRANS 1910/{ o[2]=$4 } /#TRANS 1920/{ o[3]=$4 } /#TRANS 1930/{ o[4]=$4 }  /#TRANS 2620/{ o[5]=$4 } /#TRANS 3052/{ o[6]=$4 } END{ for(i=1;i<=6;i++){ out=out o[i] " "; } print out } ' file 

Для многих файлов вы можете использовать такой код:

echo "DATE TRANS1910 TRANS1920 TRANS1930 TRANS2620 TRANS3052" >result.txt for file in $(ls -1 *.sie); do  awk ' BEGIN{ for(i=1;i<=6;i++){ o[i]=0 } } /#VER/ { date=$4; o[1]=substr(date,0,4)"-"substr(date,5,2)"-"substr(date,7,2); } /#TRANS 1910/{ o[2]=$4 } /#TRANS 1920/{ o[3]=$4 } /#TRANS 1930/{ o[4]=$4 }  /#TRANS 2620/{ o[5]=$4 } /#TRANS 3052/{ o[6]=$4 } END{ for(i=1;i<=6;i++){ out=out o[i] " "; } print out } ' $ >> result.txt done 

Результатом будет:

cat result.txt  DATE TRANS1910 TRANS1920 TRANS1930 TRANS2620 TRANS3052 2018-01-13 819.00 1334.00 438.00 -277.61 -2313.39 
Работает отлично. Спасибо за помощь! zaonline 5 лет назад 0

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