2015-08-06 1 views
0

У меня есть каталог, содержащий файлы с именования:объединить все текстовые файлы в один с именем файла в строке

test.201506010000.csv 
test.201506010005.csv 
test.201506010010.csv 
... 
test.201506302355.csv 

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

Желаемая цель:

merged.csv 

2015-06-01 00:00,<value_of_text.201506010000.csv> 
2015-06-01 00:05,<value_of_text.201506010005.csv> 
... 
2015-06-30 23:55,<value_of_text.201506312355.csv> 

ответ

0

Просто перебираем файлы, извлекая метку времени из имени файла, используя расширение параметра.

for file in test.*.csv ; do 
    time=${file#test.}  # Remove "test" on the left. 
    time=${time%.csv}   # Remove ".csv" on the right. 
    time=${time:0:4}-${time:4:2}-${time:6:2}' '${time:8:2}:${time:10:2} 
    sed "s/^/$time,/" "$file" # Append time to each line of the file. 
    rm "$file"    # This removes the original file. Have you made a backup? 
done > one-file.csv 
+0

Это почти нормально, но присоединяет дату только в первой строке каждого файла. Я не упомянул - в одном файле может быть несколько строк. Мне нужно это для всех строк во всех файлах. А также не добавлять запятую после даты 4-я строка должна быть выше, должна добавить ',' – golazo

+0

@golazo: Проверьте обновление. – choroba

+0

все еще что-то не так. У меня есть два файла: «test.nfcapd.201506010000.csv» и «test.nfcapd.201506010005.csv» оба из них имеют 4 строки содержимого. merge.sh 'для файла в * .csv; do time = $ {file # count.nfcapd.} time = $ {time% .csv} time = $ {time: 0: 4} - $ {time: 4: 2} - $ {time: 6: 2} '' $ {время: 8: 2}: $ {время: 10: 2} ',' sed "s/^/$ time, /" "$ file" сделано> merge.csv ' в результат: у меня есть 16 строк в файле merge.csv 8 с правильным результатом, но следующий 8 со странным приложением до поля даты 'merg-e-:,' – golazo

0
for file in test.*.csv; do printf "%s-%s-%s %s:%s,%s\n" ${file:5:4} ${file:9:2} ${file:11:2} ${file:13:2} ${file:15:2} $(cat $file) >>merged.csv; done 
Смежные вопросы