2016-05-10 5 views
0

это мой файлдобавление столбца в CSV и делать деление + AWK

$ cat test1 
"Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Product_Description" 
"2015-10-06","427","060","137765","Samsung Korea","Samsung SM-G900I","$39 Plan" 
"2015-10-06","592","620","0","Apple Inc","Apple iPhone 6 (A1586)","PREPAY STD - TRIAL - #16" 
"2015-10-06","007","290","0","Apple Inc","Apple iPhone 6 (A1586)","PREPAY PLUS - $0 -" 
"2015-10-06","592","050","48836832","Apple Inc","Apple iPhone 5S (A1530)","Talk and Text Connect Flexi Plan" 
"2015-10-06","409","720","113755347","Samsung Korea","Samsung SM-G360G","$29 CARRYOVER PLAN" 
"2015-10-06","742","620","19840943","Apple Inc","Apple iPhone S (A1530)","PREPAY STD - $0 - #2" 
"2015-10-06","387","180","0","HUAWEI Technologies Co Ltd","HUAWEI HUAWEI G526-L11","PREPAY STD - $1 - #4" 
"2015-10-06","731","570","2258243","Samsung Korea","Samsung SM-N910U","Business Freedom" 
"2015-10-06","556","910","13332272","Samsung Korea","Samsung GT-I9505","$49 Plan" 

эта команда добавляет столбец к концу.

$ awk -F"," 'BEGIN { OFS = "," } {$7=($4); print}' test1 
"Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Data_Volume_Bytes" 
"2015-10-06","427","060","137765","Samsung Korea","Samsung SM-G900I","137765" 
"2015-10-06","592","620","0","Apple Inc","Apple iPhone 6 (A1586)","0" 

как я получаю следующий вывод: для простоты это просто $7=($4/1).

"Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Data_Volume_Bytes" 
    "2015-10-06","427","060","137765","Samsung Korea","Samsung SM-G900I","137765" 
    "2015-10-06","592","620","0","Apple Inc","Apple iPhone 6 (A1586)","0" 

То, что я действительно хочу, чтобы быть в состоянии сделать это $7=$4/10124/1024, но по некоторым причинам я не могу получить разделение на работу.

Я пробовал это, но только получаю $ 7 = равным нулю.

awk -F"," 'BEGIN { OFS = "," } {$7=($4/1024); print}' test1 
"Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model",0 
"2015-10-06","427","060","137765","Samsung Korea","Samsung SM-G900I",0 

EDIT1: Thsi как изменить имя заголовка Col в колонке 7. Не уверен, что при использовании \" является лучшим или единственным способом сохранить его в двойные кавычки.

$ awk -F"," '{ OFS = "," } NR<=1{$7="\"Data_Volume_MB\""; print}' test1 
"Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Data_Volume_MB" 

EDIT2 ЭТО ЧТО я хочу, но она включает в себя casting from a string to an int in awksubstr($4,2,(length($4)-2)). однако ответ не в двойных кавычках 0.131383, для единообразия, как я могу это достичь?

$ awk -F"," '{ OFS = "," } NR>1{$7=substr($4,2,(length($4)-2))/1024/1024; print}' test1 
"2015-10-06","427","060","137765","Samsung Korea","Samsung SM-G900I",0.131383 
"2015-10-06","592","620","0","Apple Inc","Apple iPhone 6 (A1586)",0 
"2015-10-06","007","290","0","Apple Inc","Apple iPhone 6 (A1586)",0 
"2015-10-06","592","050","48836832","Apple Inc","Apple iPhone 5S (A1530)",46.5744 
+0

Это связано с тем, что мои значения заключены в двойные кавычки «137765». – HattrickNZ

+1

Я бы предложил обратиться к чему-то вроде Python или Ruby, который имеет фактический синтаксический анализатор CSV, который знает, как правильно обращаться с цитируемыми значениями, или, может быть, что-то вроде инструмента командной строки csv (https://github.com/gaal/ приложение-CSV). – larsks

ответ

1

Вы находитесь на правильном пути, только несколько незначительных вопросов

$ awk -F, -v OFS=, -v q='"' 'NR==1{$7=q"Data_Volume_MB"q} 
       NR>1{$7=$4; gsub(/"/,"",$7); $7= q $7/(1024*1024)q}1' file 

"Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Data_Volume_MB" 
"2015-10-06","427","060","137765","Samsung Korea","Samsung SM-G900I","0.131383" 
"2015-10-06","592","620","0","Apple Inc","Apple iPhone 6 (A1586)","0" 
"2015-10-06","007","290","0","Apple Inc","Apple iPhone 6 (A1586)","0" 
"2015-10-06","592","050","48836832","Apple Inc","Apple iPhone 5S (A1530)","46.5744" 
"2015-10-06","409","720","113755347","Samsung Korea","Samsung SM-G360G","108.486" 
"2015-10-06","742","620","19840943","Apple Inc","Apple iPhone S (A1530)","18.9218" 
"2015-10-06","387","180","0","HUAWEI Technologies Co Ltd","HUAWEI HUAWEI G526-L11","0" 
"2015-10-06","731","570","2258243","Samsung Korea","Samsung SM-N910U","2.15363" 
"2015-10-06","556","910","13332272","Samsung Korea","Samsung GT-I9505","12.7146"' 

-v q='"' определяют переменную вместо того, чтобы избежать кавычек

gsub(/"/,"",$7) удалить цитирует

$7= q $7/(1024*1024)q сделать раздел и добавить котировки назад

+0

tks. не могли бы вы дать краткое объяснение некоторых из них параметров для ссылки. – HattrickNZ

Смежные вопросы