Проблема в том, что, хотя URL-адрес предполагает, что это CSV, на самом деле это не так - общие тома, содержащие запятые, неправильно цитируются. Тем не менее, вам понадобятся дополнительные знания. В этом случае попробуйте изменить формат вывода с:
http://download.finance.yahoo.com/d/quotes.csv?s=avxl,goog,aapl&f=snl1c6j2s6f6
production:
"AVXL","ANAVEX LIFE SCIEN",0.1799,"-0.0041", 38,260,000,0, 23,703,000
"GOOG","Google Inc.",500.87,"+4.69", 678,365,000,67.911B, 572,967,000
"AAPL","Apple Inc.",109.80,"-0.42", 5,864,839,000,182.8B, 5,856,335,000
на, например:
http://download.finance.yahoo.com/d/quotes.csv?s=avxl,goog,aapl&f=sl1c6sj2ss6sf6
, который дает:
"AVXL",0.1799,"-0.0041","AVXL", 38,260,000,"AVXL",0,"AVXL", 23,703,000
"GOOG",500.87,"+4.69","GOOG", 678,365,000,"GOOG",67.911B,"GOOG", 572,967,000
"AAPL",109.80,"-0.42","AAPL", 5,864,839,000,"AAPL",182.8B,"AAPL", 5,856,335,000
Затем вы можете проанализировать это, например:
sed 's/"[A-Z][^"]*",/ & /g' \
| awk -- '{
gsub("\"", "", $2);
gsub(",", "", $4);
gsub(",", "", $8);
print $1 $2 $4 "," $6 $8
}'
, что даст вам кое-что еще. Подобно CSV:
"AVXL",0.1799,-0.0041,38260000,0,23703000
"GOOG",500.87,+4.69,678365000,67.911B,572967000
"AAPL",109.80,-0.42,5864839000,182.8B,5856335000
Хитрость в том, что тикерный символ хорошо сочетается, и вы можете использовать его как якорь там, где он вам нужен.
Магическое заклинание, приведенное выше, делает следующее:
вызов sed
окружает вхождения символов тикера (которые представляют собой строки в двойных кавычках, начинающиеся с заглавной буквы) с пробелами, таким образом, эффективно выделяя их белым -список, разделенных пробелами
awk
сначала заменяет все двойные кавычки (первая строка) и запятые (вторая и третья строки) в полях 2 (чтобы поле изменения цены не заключалось в двойные кавычки и, таким образом, рассматривалось как строка вместо число с плавающей запятой, если вы затем начнете обрабатывать его с помощью электронной таблицы) и 4 и 8 соответственно. В последней строке печатаются измененные поля (и опускаются теперь ненужные дополнительные символы тикера).
Таким образом, в конце концов, вы можете сделать это так:
curl -s 'http://download.finance.yahoo.com/d/quotes.csv?s=avxl,goog,aapl&f=sl1c6sj2ss6sf6' \
| sed 's/"[A-Z][^"]*",/ & /g' \
| awk -- '{
gsub("\"", "", $2);
gsub(",", "", $4);
gsub(",", "", $8);
print $1 $2 $4 "," $6 $8
}'
Обратите внимание на обратную косую черту \
в конце строк - это гарантирует, что команды не вызываются отдельно, а как если бы они были на одной линии. Это обозначение используется для повышения удобочитаемости. Обратные косые черты не используются в четырехстрочном сценарии AWK, поскольку он заключен в кавычки, и новые строки, таким образом, являются частью всей команды. И обязательно прочтите несколько базовых руководств по написанию сценариев оболочки UNIX - в дальнейшем это сэкономит вам много времени.
Также обратите внимание на кавычки вокруг URL-адреса - они гарантируют, что специальные символы ( и
в данном случае) не интерпретируются оболочкой.
короче с переименованием (он не будет работать в случае разных файловых систем):
переименовать '' "/dev/DataStage/myProject/Archive/TEST/ `date +%Y%m%d _%H%M `." /dev/DataStage/myProject/source/TEST/MyFile _*.csv
с петлей
для файла в /dev/DataStage/myProject/source/TEST/MyFile _*.csv ; делать имя_файла= `базовое имя $файл `mv $file /dev/DataStage/myProject/Archive/TEST/ `date +%Y%m%d _%H%M `.${filename} сделано