2015-11-08 3 views
1

Я пытаюсь объединить две строки файла csv в одну строку.Объедините две строки csv в одну строку

CSV файл:

"Operations=5009.0,AverageLatency(us)=714.4248352964663,MinLatency(us)=300.0,MaxLatency(us)=173567.0,95thPercentileLatency(us)=1216.0,99thPercentileLatency(us)=2645.0,Return=5009" 
"Operations=4991.0,AverageLatency(us)=831.4189541174113,MinLatency(us)=370.0,MaxLatency(us)=25999.0,95thPercentileLatency(us)=1495.0,99thPercentileLatency(us)=2857.0,Return=4991" 

ожидается выход:

"Operations=5009.0,AverageLatency(us)=714.4248352964663,MinLatency(us)=300.0,MaxLatency(us)=173567.0,95thPercentileLatency(us)=1216.0,99thPercentileLatency(us)=2645.0,Return=5009","Operations=4991.0,AverageLatency(us)=831.4189541174113,MinLatency(us)=370.0,MaxLatency(us)=25999.0,95thPercentileLatency(us)=1495.0,99thPercentileLatency(us)=2857.0,Return=4991" 

Я попытался это:

awk 'NR%2{printf $0" ";next;}1' file.csv 

Но его не печатает весь первый ряд.

"Operations=5009.0,AverageLatency(us)=714.4248352964663,MinLatency(us)=300.0,MaxLatency(us)=173567.0,95thPercentileLatency(us)=1216.0,99thPercenti "Operations=4991.0,AverageLatency(us)=831.4189541174113,MinLatency(us)=370.0,MaxLatency(us)=25999.0,95thPercentileLatency(us)=1495.0,99thPercentileLatency(us)=2857.0,Return=4991" 

Есть идеи?

Благодаря

+0

Какой язык программирования вы используете? – Whitecat

+0

@Whitecat Я использую python. – arazx

ответ

1

Для примера вы описали, следующий код должен делать эту работу:

awk 'BEGIN{OFS=","}{if(NR%2==1){val=$0;}else{print val,$0}}' inputFile 

магазин содержание нечетных строк в переменной и распечатать содержимое этой переменной вместе с током строка в четных строках.

Выход:

"Operations=5009.0,AverageLatency(us)=714.4248352964663,MinLatency(us)=300.0,MaxLatency(us)=173567.0,95thPercentileLatency(us)=1216.0,99thPercentileLatency(us)=2645.0,Return=5009","Operations=4991.0,AverageLatency(us)=831.4189541174113,MinLatency(us)=370.0,MaxLatency(us)=25999.0,95thPercentileLatency(us)=1495.0,99thPercentileLatency(us)=2857.0,Return=4991" 

Если бы были только две строки в вашем входном файле, есть более сложный способ решить эту проблему (я первый придумал):

awk 'BEGIN{RS=""; FS="\n"; OFS=",";}{print $1,$2;}' inputFile 

Этот код интерпретирует разрывы строк («\ n») в качестве разделителей полей. То есть две строки в вашем inputFile отображаются в виде двух столбцов одного и того же набора данных. (Нам нужно, чтобы RS="" перезаписывал свое значение по умолчанию.)
На выходе этот разрыв строки должен быть заменен запятой (OFS=",").

+0

Спасибо! Но все же первая строка не является полной. – arazx

+0

@Araz: Когда я запускаю команду здесь, я получаю ожидаемый результат. Что вам не хватает? Кстати, ваша команда также дает ожидаемый результат (за исключением отсутствующего «,» в качестве разделителя полей). Может быть, что-то не так с вашим дисплеем. Вы пытались записать вывод в файл? Я добавил свой результат в ответ ... –

+0

В моем исходном файле возникла проблема. Просто решил. Благодарю. – arazx