2015-05-06 2 views
-2

У меня есть файл с двумя столбцами, разделенный пробелом. Первый столбец является целым, а второй - двойным. Мой файл имеет следующий формат:Преобразование столбца файла ascii в целое число

1 201.45 
2 201.42 
3 202.92 

... 

Что я хочу сделать, это распечатать тот же файл с двумя целыми столбцами. Новый файл должен нравится, что

1 201 
2 201 
3 203 

... 

я пытался сделать, используя AWK давая следующую команду

awk '{print $1 " " (int) $2}' file.dat 

, но, как ожидается, это не работает.

Любые идеи о том, как это сделать?

+0

Я понимаю, что вы хотите, округление, в противном случае я бы предложил 'СЭД«s /\..*// g'' – Sobrique

+0

@Sobrique: Большое спасибо за ваш комментарий! Ну округление должно работать! – Thanos

+2

*** C++ *** AND *** Perl *** AND *** awk *** ??? Выберите язык, пожалуйста. –

ответ

2

Буквально только нужно добавить 0,5

awk '{print $1,int($2+0.5)}' file.dat 
+0

Большое спасибо за ваш ответ! Трюк состоял в том, чтобы использовать 'int ($ 2)' вместо '(int) $ 2', как вы бы сделали в' C++ '. Большое спасибо за Вашу помощь! – Thanos

+0

@Thanos Нет проблем –

+1

@Thanos '(int) $ 2' в C++ будет отличным. В awk нет ** броска. 'int()' является функцией. awk - очень урезанный C-подобный язык с несколькими колоколами и свистами для обработки текста. Не предполагайте, что то, что вы можете сделать в C/C++, вы также можете сделать в awk или наоборот. Узнайте, как это новый язык из книги «Эффективное программирование Awk», 4-е издание, Арнольда Роббинса. –

1

Как насчет Perl:

perl -lne "print join (' ', map { int $_ + 0.5 } split);" file.dat 

Дает:

1 201 
2 201 
3 203 

NB: трюк - добавить 0.5, потому что int раундов вниз, и таким образом это дает желаемый результат.

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