Я пытался написать скрипт, который будет анализировать файл CSV и выдавать результат в указанном формате.
Входной файл имеет следующий формат.
collectionBeginTime,ID,MU,hostname,Granularity,SampleInterval,suspectFlag,memCpuUsage,memUsedMemory,memMemoryCapacity,memRequestNum,memOnlineUserNum,memUsedLogDisk,memLogDiskCapacity,freeCPUUsage,freeMemory,freeLogDisk
2015-11-27 17:30:00-0500,NE=2106384,hwMEMPerformanceCollect,PG_172.16.169.70,900,900,0,24,7130,36153,0,1554,23026,157239,76,29023,134213
2015-11-27 17:30:00-0500,NE=2106386,hwMEMPerformanceCollect,PG_172.16.169.68,900,900,0,4,7481,36153,0,1594,22778,157239,96,28672,134461
Ожидается, что выходные данные будут в формате (показаны только несколько выходных строк для первой строки ввода):
collectionBeginTime , hostname , Parameters
2015-11-27 17:30:00-0500, PG_172.16.169.70, SampleInterval:900
2015-11-27 17:30:00-0500, PG_172.16.169.70, suspectFlag:0
Мне нужно напечатать столбцы 1 и 4 для каждой строки после первой, за которыми следует имя столбца (из строки 1 файла), :
и значение столбца для столбцов 6..NF (полностью игнорируя столбцы 2, 3, 5) . Одна входная строка порождает множество выходных строк.
Сценарий, который я написал:
#!/bin/bash
FILENAME=$1
awk -F',' 'BEGIN{OFS=",";} { if ( NR!=1 )print $1,$4,$6,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17}' < $FILENAME >> tmp.txt
echo "completed"
Скрипт запущен, но показывает все параметры в одной строке без названия. Как это исправить?
for (i = 4; i <= NF; i++) name[i] = $i;
). В других строках вы перебираете поля 4..NF, печатая соответствующие данные, возможно, сprintf
. - person Jonathan Leffler   schedule 21.06.2016cut
+column
, но он не подходит для этого варианта использования. - person Aaron   schedule 21.06.2016