Я пытаюсь отфильтровать информацию из файла - она организована по столбцам, и я не нашел лучшего способа получить то, что хочу, чем следующее:

less $file | cut -d':' -f6 | cut -d' ' -f3 | cut -d '#' -f1

Есть ли альтернатива рассылке спама? Любая помощь будет оценена!

1 ответ1

2

Как правило, фильтрацию строк лучше всего выполнять с помощью регулярных выражений. Однако для вашего конкретного примера вы можете перевести каждый cut в один из двух простых эквивалентов awk следующим образом. Любой из них:

awk '{FS=":";$0=$0; FS=" ";$0=$6; FS="#";$0=$3; print $1}' $file

awk '{split($0,a,":"); split(a[6],b,/ +/); split(b[3],c,"#"); print c[1]}' $file

Первый метод преобразует "cut -dx -fy" в "FS = x; для ввода $ 0 вводим, в результате получаем $ y". FS - это разделитель полей.

2-е преобразовывает его в «split (input, output, x), результат - output [y]». Я не уверен, как cut обрабатывает пробелы как разделитель, поэтому я использовал регулярное выражение / +/ которое соответствует множеству пробелов как одному. Используйте " " если разделить на один пробел.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .