[
] Тот же самый вопрос. [
] [
] Об этом вопросе сообщается и подтверждается [] http://code.google.com/p/chromium/issues/detail?id=378303[][
]
Есть много способов сделать это. Вот один из них, использующий только оболочку (никаких внешних программ):
#!/bin/sh
IFS=, read -r f1 f2
printf "%s,%s-%s" "$f1" "$f2" "$f2"
while IFS=, read -r f1 f2
do
printf ",%s-%s" "$f2" "$f2"
done
printf "\n"
Поместите вышеперечисленное в файл с именем, скажем, myscript.sh
, do chmod +x myscript.sh
,
и затем запустите ./myscript.sh
с перенаправлением входных и выходных данных куда угодно.
Код прост
,
.
Записывайте поле1 ,
field2 -
field2, -, не , заканчивающееся новой строкой. ,
.
Дважды перепишите второе, которому предшествует ,
, разделенное -
,
и не прекращена новой линией. Начиная с этого файла:
$ cat file
uk,1234560000
uk,6789067000
uk,4567890000
Если форматирование в вопросе верное, я считаю, что это делает то, о чем вы спрашиваете:
$ awk -F, '1==NR{printf "%s",$1} {printf ",%s-%s",$2,$2} END{print""}' file
uk,1234560000-1234560000,6789067000-6789067000,4567890000-4567890000
awk будет читать в записи (строке) одновременно. Каждая строка разделена на поля. В этом примере и запятой в качестве разделителя полей первое поле, называемое $1
, всегда uk
, а второе поле, называемое $2
, является номером.
-F,
Это заставляет awk рассматривать запятую как разделитель полей.
1==NR{printf "%s",$1}
NR
- это количество прочитанных строк. Когда 1 == NR
, мы находимся на первой строке. Когда мы находимся в первой строке, это говорит awk, чтобы вывести первое поле, uk
.
printf ",%s-%s",$2,$2
Для всех строк это означает, что awk выведет запятую, за которой последует второе поле, тире, и второе поле снова.
END{print""}
When we reach the end of the file, this says awk to print a newline.