Сценарий оболочки для добавления строки в конец всех полей CSV во 2-м столбце - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь написать скрипт BASH, который добавит : 00: 00 к концу всех значений во 2-м поле CSV-файла.

Я пробовал читать справочные страницы awk, но я не понимаю, как мне это сделать.Любая помощь приветствуется!

Исходный файл:

2012-02-29,00,Manhatten,New York,244
2012-02-29,01,Manhatten,New York,246
2012-02-29,02,Manhatten,New York,554
2012-02-29,03,Manhatten,New York,854
2012-02-29,04,Manhatten,New York,488

Файл результата:

2012-02-29,00:00:00,Manhatten,New York,244
2012-02-29,01:00:00,Manhatten,New York,246
2012-02-29,02:00:00,Manhatten,New York,554
2012-02-29,03:00:00,Manhatten,New York,854
2012-02-29,04:00:00,Manhatten,New York,488

Ответы [ 4 ]

1 голос
/ 29 февраля 2012

Ниже приведена команда для фильтрации преобразования:

awk 'BEGIN { FS=","; OFS="," } (NF>=2) { $2=$2 ":00:00"; } (1)'

Если у вас есть файл source.txt, в котором хранятся исходные данные, и файл result.txt, в котором будут сохранены выходные данные, следующая команда сделает:

awk 'BEGIN { FS=","; OFS="," } (NF>=2) { $2=$2 ":00:00"; } (1)' source.txt >result.txt

Если у вас есть несколько входных файлов, вы можете добавить их в качестве аргументов. См. man-страницу awk для более подробной информации.

0 голосов
/ 29 февраля 2012

Это может работать для вас:

sed 's/,/:00:00,/2' file
2012-02-29,00:00:00,Manhatten,New York,244
2012-02-29,01:00:00,Manhatten,New York,246
2012-02-29,02:00:00,Manhatten,New York,554
2012-02-29,03:00:00,Manhatten,New York,854
2012-02-29,04:00:00,Manhatten,New York,488

или это:

awk  '{sub(/,../,"&:00:00")}1' file
2012-02-29,00:00:00,Manhatten,New York,244
2012-02-29,01:00:00,Manhatten,New York,246
2012-02-29,02:00:00,Manhatten,New York,554
2012-02-29,03:00:00,Manhatten,New York,854
2012-02-29,04:00:00,Manhatten,New York,488
0 голосов
/ 29 февраля 2012

Вы также можете использовать sed (что будет моим первым выбором), но использование awk тоже подойдет.

Вам нужно извлечь значение в каждом столбце и просто распечатать ихназад, но при печати второго столбца добавьте :00:00.

, см. этот пример, попробуйте и получите ответ, если у вас есть какие-то конкретные вопросы:

$ cat a.txt
2012-02-29,00,Manhatten,New York,244
2012-02-29,01,Manhatten,New York,246
2012-02-29,02,Manhatten,New York,554
2012-02-29,03,Manhatten,New York,854
2012-02-29,04,Manhatten,New York,488
$ awk -F , '{print $1 "-" $2 "-" $3 "-" $4 "-" $5}' a.txt
2012-02-29 - 00 - Manhatten - New York - 244
2012-02-29 - 01 - Manhatten - New York - 246
2012-02-29 - 02 - Manhatten - New York - 554
2012-02-29 - 03 - Manhatten - New York - 854
2012-02-29 - 04 - Manhatten - New York - 488
$
0 голосов
/ 29 февраля 2012

Один вкладыш с Perl

perl -F, -nae '$F[1].=":00:00";print join(",", @F);'
...