У меня есть файл, заполненный такими данными:

15-06-18 22:00 2968

Каждая запись отделяется новой строкой. Я хочу извлечь последний номер (2968). Как я могу это сделать? (Я на Linux с bash).

Извините, если у меня нет правильных тегов / я пишу в неправильном месте. Я не уверен, где разместить этот вопрос.

5 ответов5

2

Распечатать последний столбец:

awk '{print $NF}' file

Выход:

2968

Переменная NF установлена на общее количество полей во входной записи. $ NF всегда содержит содержимое последнего столбца. Еще короче

awk '$0=$NF' file
1

Я разобрался с решением, которое удаляет первые 15 символов.

sed 's/^..............//' tmp.txt

Спасибо, @ fixer1234!

1

Вы можете извлечь нужные данные, используя awk , cut или sed или даже некоторую комбинацию grep с regex.

Если данные в каждой строке вашего файла соответствуют точному шаблону, представленному здесь:

15-06-18 22:00 2968

Затем вы можете извлечь последний номер следующим образом:

awk '{ print $3 }' file_path

И чтобы сохранить данные, вы можете перенаправить их в другой файл:

awk '{ print $3 }' file_path > new_file

Как это устроено :

По сути, awk - очень мощный инструмент, используемый для манипулирования текстовыми данными. В твоем случае :

15-06-18 22:00 2968

Выше строки можно рассматривать как 3 строки, разделенные space между ними, а awk по умолчанию обрабатывает пробел как разделитель (заданный -F).

Попробуйте поиграть с awk, попробуйте это с вашими данными, и вы поймете намного лучше.

awk -F: '{ print $2 }' your_file
awk -F- '{ print $3 }' your_file

Не стесняйтесь добавлять более подробно.

1

Предполагая, что содержимое находится в файле с именем 'file', следует сделать следующее.

cut -d ' ' -f 3 file

cut - это команда Unix. Со страницы руководства:

  • вырезать - удалить разделы из каждой строки файлов
  • -d говорит разделитель, чтобы использовать для резки.
  • -f какие поля выбрать.
  • file является исходным файлом.

результат идет на стандартный вывод.

0

Или в bash:

#!/bin/bash

cat "$1" | while read day hour value ; do
    echo $value
done

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