2014-09-23 5 views
0

У меня есть файл с конвейерами, есть несколько полей с десятичными знаками, мне нужно игнорировать нули после десятичной точки в любом поле и перенаправить вывод в другой файл, может быть мало десятичные столбцы как колонке а, как показано нижеудалить завершающие нули из файла с разделителями каналов в unix

column A 
24.4400 
.8930 
1.6730 
.2200 
1.6870 

ожидается выход

24.44 
0.893 
1.673 
0.22 
1.687 

Предположим ниже трубы разделителями файл

080|580||185.50|12|0|24.4400|2014-06-09|20140531 
080|580||185.20|12|0|700.00|2014-06-09|20140531 
080|580||185.30|12|0|30.500|2014-06-09|20140531 

ожидаемый выход должен быть

080|580||185.5|12|0|24.44|2014-06-09|20140531 
080|580||185.2|12|0|700|2014-06-09|20140531 
080|580||185.3|12|0|30.5|2014-06-09|20140531 

Может кто-нибудь пожалуйста HelpMe найти решение для этого, он должен проверить все десятичные поля и удалить конечные нули из этих полей и выхода должен быть перенаправлен на другой файл

если выше не представляется возможным то я ищу решение по крайней мере на ниже

, так как я знаю, положение о f десятичные поля, есть ли способ указать эти конкретные поля в команде unix и удалить завершающие нули из этих полей и перенаправить вывод в новый файл, я был бы признателен, если кто-нибудь сможет найти решение для этого

+0

Я не могу придумать, зачем вам это нужно. Можете ли вы объяснить это упражнение? Удачи. – shellter

+0

Не могли бы вы использовать python? Гораздо более прямой. – beroe

ответ

2

Вы можете использовать AWK для выполнения этой задачи:

$ awk -F\| '{$4=sprintf("%g",$4);$7=sprintf("%g",$7)}1' OFS="|" file 

sprintf("%g",$7): напечатать кратчайшее представление или поплавок.

+0

Вы можете прямо сказать '{$ 4 = $ 4 + 0; $ 7 = $ 7 + 0} 1 '. Он автоматически преобразуется в число, так что конечные нули уйдут. – fedorqui

+0

Я просто замечаю, что удаление конечных нулей здесь бесполезно, можно сделать это с помощью только маски, мне нравится ваше решение также @fedorqui – klashxx

1

Как насчет этого awk?

$ awk 'BEGIN{FS=OFS="|"} {$4=$4+0; $7=$7+0}1' file 
080|580||185.5|12|0|24.44|2014-06-09|20140531 
080|580||185.2|12|0|700|2014-06-09|20140531 
080|580||185.3|12|0|30.5|2014-06-09|20140531 

Это идиоматическое способ преобразования 4-го и 7-го поля в число, так что задние 0s исчезают.

Обратите внимание, что ключевым моментом является выполнение арифметической операции в поле. И поскольку мы хотим, чтобы значение сохранялось как есть, ничего подобного +0, /0 (если нет 0) или *1.

+0

+1, но я бы использовал '$ 4 + = 0; $ 7 + = 0';) – klashxx

+0

I отчасти предпочитают '$ 4 = $ 4 + 0', чтобы он был более ясным. Но мне нравится ваша идея, спасибо @klashxx! – fedorqui

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