Как я печатаю поле из разделенного от канала файла?

Это то, что я в итоге сделал, чтобы заставить его работать. Мне пришлось изменить длину на число с плавающей точкой to_f, затем я смог заставить его правильно тестировать в консоли.

def first_half(list)
  list[0...(list.length.to_f / 2).ceil]
end

def last_half(list)
  list[(list.length.to_f / 2).ceil...list.length]
end

Использование .ceil в обоих методах позволило математике работать.

6
задан Jon Ericson 17 October 2008 в 21:22
поделиться

4 ответа

Ключевой пункт здесь то, что символ вертикальной черты (|) должен быть оставлен к оболочке. Используйте"\|"или"'|'"чтобы защитить его от интерпретации оболочки и позволить ему быть переданным awk на командной строке.


Чтение комментариев, я вижу, что исходный плакат представляет упрощенную версию исходной проблемы, которая включила фильтрацию file прежде, чем выбрать и распечатать поля. Передача через grep использовался и результат передается по каналу в awk для полевого выбора. Это составляет совершенно ненужное cat file это появляется в вопросе (он заменяет grep <pattern> file).

Прекрасный, который будет работать. Однако awk является в основном инструментом сопоставления с образцом самостоятельно и может доверяться, чтобы найти и работать над согласующими отрезками длинной линии, не будучи должен вызвать grep. Используйте что-то как:

awk -F\| '/<pattern>/{print $2;}{next;}' file

/<pattern>/ бит говорит awk выполнить действие, которое следует строки то соответствие <pattern>.

Выглядящий словно потерявший {next;} пропуск действия по умолчанию к следующей строке во входе. Это, кажется, не необходимо, но у меня есть эта привычка от давно...

9
ответ дан 8 December 2019 в 03:14
поделиться

Или просто используйте одну команду:

cut -d '|' -f FIELDNUMBER
18
ответ дан 8 December 2019 в 03:14
поделиться

Символа вертикальной черты нужно оставить так, чтобы оболочка не интерпретировала его. Простое решение:

$ awk -F\| '{print $2}' file

Другой выбор состоял бы в том, чтобы заключить символ в кавычки:

$ awk -F'|' '{print $2}' file
3
ответ дан 8 December 2019 в 03:14
поделиться

И 'файл' не содержит символов вертикальной черты, таким образом, он ничего не печатает. Необходимо или использовать 'файл кошки' или просто перечислить файл после awk программы.

0
ответ дан 8 December 2019 в 03:14
поделиться