0
我一直在編寫腳本,它將解析CSV文件並以指定的格式輸出。使用shell腳本解析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第一行後面是列名(來自文件的第一行),:
和列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"
腳本在運行,但沒有顯示它的名字在同一行的所有參數。我如何解決它?
您捕獲第1行中的字段以便重複使用('for(i = 4; i <= NF; i ++)name [i] = $ i;')。在其他行中,您可以使用'printf'來遍歷字段4..NF打印相關數據。 –
這些參數來自哪裏?輸入樣本中不存在它們 – Aaron
在輸出列中,必須省略2,3,5和7,然後在6之後將它與像(SampleInterval:900)這樣的參數名稱連接起來。你可以寫awk語句我想完整的,以便它可以更清楚 –