Я взламываю немного AWK. Я начинающий с этим. Я выполнил домашнее задание по следующей проблеме и просто не могу заставить его работать.
ОБРАЗЕЦ ДАННЫХ:
Start Date 12/3/17
End Date 12/30/17
Report Type Report1
Currency ZAR
Country Identifier MType Quantity Net Net Net Code Title Contrib I_Type M_Type Vendor Identifier Offline Indicator LSN
ZA 44057330 FMP 1 0.050666 0.050666 USYYYYYYYYYY ABC Tom 1 1 USYYYYYYYYYY 0 SUT
ZA 1267456726 SIMT 1 0.03 0.03 USXXXXXXXXXX DEF Frances 1 1 USXXXXXXXXXX 0 XYZ
Row Count 657
Storefront Name MType Quantity Net Net
ZA FMP 601 30.45
ZA IAP 13 0.68
ZA IMP 1035 69.36
ZA SIMP 54 1.4
ZA FMT 70 0.53
ZA IMT 92 1.68
ZA SIMT 6 0.18
желаемый выход:
(я оставил здесь специальные символы без экранирования.)
"Filename" "Start Date" "End Date" "Currency" "Country" "Identifier" "MType" "Quantity" "Net" "NetNet" "Code" "Title" "Contrib" "I_Type" "M_Type" "Vendor Identifier" "Offline Indicator" "LSN"
"rawfile.txt" "12/3/17" "12/30/17" "ZAR" "ZA" "44057330" "FMP" "1" "0.050666" "0.050666" "USYYYYYYYYYY" "ABC" "Tom" "1" "1" "USYYYYYYYYYY" "0" "SUT"
"rawfile.txt" "12/3/17" "12/30/17" "ZAR" "ZA" "1267456726" "SIMT" "1" "0.03" "0.03" "USXXXXXXXXXX" "DEF" "Frances" "1" "1" "USXXXXXXXXXX" "0" "XYZ"
В основном мне просто нужно получить большую часть заголовка из строки 5, но три поля, которые мне нужны, находятся в строках 1-4. Кроме того, мне не нужны данные, в том числе и после строки, начинающейся с «Количество строк».
МОЙ ЛУЧШИЙ "Угадай" так далеко:
gawk '
function basename(file) {
sub(".*/", "", file)
return file
}
/^Row Count/ {nextfile}
FNR == 1 { StartDate=$2; }
FNR == 2 { EndDate=$2; }
FNR == 4 { curr=$2; }
NR == 5 {$0 = "StartDate" OFS "EndDate" OFS "Filename" OFS "curr" OFS $0; print}
FNR > 5 {$0 = StartDate OFS EndDate OFS basename(FILENAME) OFS curr OFS $0; print}
' OFS='\t' path/to/sourcefiles/*.txt > path/to/outfile.txt
Спасибо!
редактирует:
НОВЫЙ СТОЛ
Это строки перед заголовками полей в каждом файле. Содержимое начинается со строки 4:
Provider ,,,,,,,,,,,,
01/01/2018 - 01/31/2018,,,,,,,,,,,,
"МОЙ" СЦЕНАРИЙ
Это почти работает. Но он включает строки 1-3 для каждого файла:
поглазеть
Базовое имя функции (файл) {
sub (". * /", "", file)
возврат файла
}
НАЧАЛО {FS = OFS = ","}
NR <3 {
если (NR == 2) {
hdr = "Report_Period" OFS
val = val $ 1 OFS
}
следующий
}
FNR> 3 {
распечатать "имя файла", hdr $ 0
следующий
}
{печать базового имени (FILENAME), val $ 0}
'OFS = "," / path / to / input / files> ~ / path / to / output / file / file.csv
Конец редактирования