Удаление ведущих нуля в файле разделителя трубы с использованием AWK

Да, можно. И нет, не следует (если не работаете в непубличной сети, что кажется очень маловероятным из-за того, что OpenVPN является методом открытого доступа к частной подсети).

Причины, по которым соответствует процессу проверки сертификата протоколов TLS и надежность соединений, когда

  1. Он самоподписан и не подписан авторитетным центром сертификации, это может и приведет к вектору атаки MITM, потому что нет проверка может или будет происходить во время начального процесса установления связи.
  2. Теперь закрытый ключ, который использовался ранее, используется повторно, что отрицает (если он был перемещен с одного устройства на другое) защиту безопасности "закрытого ключа". Исключение составляют случаи, когда для перемещения файла используются такие протоколы, как SCP.
0
02.02.2019, 17:12
4 ответа

Попробуйте это,

awk 'BEGIN{OFS=FS="|"}{$6=sprintf("%1.0f",$6);$8=sprintf("%3.2f",$8);$9=sprintf("%1.0f",$9);$10=sprintf("%1.0f",$10)}1;' tt.txt

010N00000001|20100111|20150112|PA|3|1|41|100.00|0|0|022|R| |
010N00000001|20100115|20150115|PA|3|1|41|-50.00|0|0|022|R| |
  • %X, где X — обязательные цифры.
  • .xf, где x — обязательные десятичные дроби.

источник

1
28.01.2020, 02:18

Например, если fileсодержит ваши данные:

awk -F\| -v OFS=\| '{ $6  = sprintf( "%.0f",  $6  )
                      $8  = sprintf( "%.2f",  $8  )
                      $9  = sprintf( "%.0f",  $9  )
                      $10 = sprintf( "%.0f",  $10 )
                      print }' file

Опция -F\|устанавливает разделитель полей ввода ()на символ вертикальной черты; -v OFS=\|делает то же самое для разделителя выходных полей. Строки с назначениями просто переформатируют соответствующие поля с помощью функцииsprintf()-(, которая возвращает то, что printf()напечатала бы с теми же аргументами ), и в конце выводится полная переформатированная запись с помощью print.

Что касается переформатирования с помощью sprintf(), вы можете выбрать из множества контрольных букв и связанных модификаторов . Ссылки ведут на документацию GNU awk, но большинство символов довольно универсальны.

3
28.01.2020, 02:18

numfmtиз пакета GNU Coreutils становится полезным для подобных задач -, к сожалению, он пока не поддерживает несколько --field,--formatспецификации и, по-видимому, не обрабатывает числа с унарными +. Немного поругавшись:

$ sed 's/[+ ]//g' file | 
    numfmt -d'|' --field=8 --format='%.2f' | numfmt -d'|' --field=6,9,10 --format='%.0f'
010N00000001|20100111|20150112|PA|3|1|41|100.00|0|0|022|R||
010N00000001|20100115|20150115|PA|3|1|41|-50.00|0|0|022|R||
0
28.01.2020, 02:18

Я попытался выполнить приведенную ниже команду, и она сработала нормально, как и ожидалось

k=`awk '{print NF}' example.txt | sort -nr| sed -n '1p'`

for ((j=1;j<=2;j++)); do for((i=1;i<=$k;i++)); do awk -F "| -v i="$i" -v j="$j"  'NR==j{print $i}' example.txt| sed "s/^[+-]//g"| sed "s/^0\{2,\}//g"| sed "s/^\..*/0/g"; done| tr "\n" "|"| sed 's/|$//g'| sed 's/^|//g'; done| sed -r "s/\s+/|\n/g"| sed "s/^|//g"

выход

010N00000001|20100111|20150112|PA|3|1|41|100.00|0|0|022|R||
010N00000001|20100115|20150115|PA|3|1|41|50.00|0|0|022|R||
0
28.01.2020, 02:18

Теги

Похожие вопросы