Intereting Posts
Как найти временную метку через 10 минут в Linux Предотвращение использования планировщиком определенных ядер на FreeBSD Попытка создать мультизагрузочный USB для установки Низкоконтрастная цветовая схема в файле конфигурации xxxterm? Какой файловый режим является символической ссылкой? Как предотвратить зависание чувствительных аргументов CLI в журналеctct при использовании sudo? Не удалось проверить подпись ядра «gpg: Не удается проверить подпись: открытый ключ не найден» Является ли один bash shellshock для исправления файла tar для SLES? Проблема с прохождением пути, содержащего пробелы и скобки Диспетчер задач KDE: редактирование приложения в контекстном меню Как я могу ограничить время выполнения скрипта Python Что «сломано» в семантике наследования cpuset cgroup в ядре Linux? Система выключается, даже если присутствует ингибитор Отключение блокировки затвора с помощью setxkbmap делает ключ Shift в Emacs Почему каталоги / usr и / tmp для Linux пропускают гласные в своих письмах?

Unix awk decimal экспорт в трубу

Я пытаюсь адаптировать скрипт, который проходит через большое количество отдельных файлов (subj_id) и выводит значение 4 $ в указанной строке.

Текстовый файл содержит строки

# Measure Brain, ICV, Brain Volume, 1118718.609121, mm^3 

Мой скрипт содержит эту строку для экспорта номера 1118718:

 printf "%g," `cat ${subj_id}/stats/aseg.stats | grep ICV | awk -F, '{print $4}'` > BrainVol.csv 

Мои значения: A) 666666.012345 или B) 7777777.012345 , поэтому сценарий отлично работает с A) и экспортирует 666666 но для случая B) он экспортирует 7777780 . Полагаю, мне нужно использовать printf, чтобы указать количество десятичных знаков для вывода, но '{printf "%.2f\n",$4}' не работает.

Извините, это слишком просто, но правильный порядок в этом канале включает десятичный спецификатор (если это проблема).

Это сценарий bash, и я запускаю Mac OS X 10.7.5

Любая помощь будет принята с благодарностью.

Для меня работает следующее:

 awk -F, '/ICV/ {printf "%.2f\n", $4}' ${subj_id}/stats/aseg.stats 

где, если я использую следующий источник:

 # Measure Brain, ICV, Brain Volume, 1118718.609121, mm^3 # Measure Brain, ICV, Brain Volume, 7777777.012345, mm^3 # Measure Brain, ICV, Brain Volume, 666666.012345, mm^3 

Я получаю следующий вывод:

 1118718.61 7777777.01 666666.01 

Как отметил @glennjackman, мы можем сделать совпадение более конкретным, проверяя, является ли ожидаемое поле точной строкой, которую мы хотим, вместо того, чтобы сопоставлять шаблон в любой точке строки, делая

 awk -F, '$2 == " ICV" {printf "%.2f\n", $4}' ${subj_id}/stats/aseg.stats 

или если мы хотим быть гибкими в отношении пробелов, мы могли бы сопоставить шаблон с этим полем

 awk -F, '$2 == /^[[:space:]]*ICV[[:space:]]*$/ {printf "%.2f\n", $4}' ${subj_id}/stats/aseg.stats