Извлекать значения из определенного файла и отображать замененные значения в терминале

У меня есть файл с именем input.txt, который содержит данные о студентах в формате StudentName|Class|SchoolName.

Shriii|Fourth|ADCET
Chaitraliii|Fourth|ADCET
Shubhangi|Fourth|ADCET
Prathamesh|Third|RIT

Я хочу отображать эти значения в обратном порядке для конкретного колледжа. Пример:

ADCET|Fourth|Shriii
ADCET|Fourth|Chaitraliii

Я использовал grep 'ADCET$' input.txt, который дает вывод

Shriii|Fourth|ADCET
Chaitraliii|Fourth|ADCET

Но я хочу в обратном порядке. Я также использовал grep 'ADCET$' input.txt | sort -r, но не получил требуемого результата

Ref1

Возможно, вы увидите это: stackoverflow.com/a/13367179/1970049 для функции, которая переворачивает значения, разделенные запятыми (вы можете настроить свой разделитель с помощью регулярного выражения).

krassdanke 21.02.2019 10:55

@WiktorStribiżew grep 'ADCET$' input.txt | tac поменял местами по вертикали. Это не ожидаемый результат.

SMshrimant 21.02.2019 10:59

@dth Файл input.txt содержит | разделенные значения, а не , разделенные значения.

SMshrimant 21.02.2019 11:00
| sed 's/^\([^|]*\)\(|.*|\)\([^|]*\)$/\3\2\1/'?
Wiktor Stribiżew 21.02.2019 11:02

@WiktorStribiżew Это сработало. Можете ли вы дать подробное объяснение, чтобы я мог отметить его как правильный ответ.

SMshrimant 21.02.2019 11:07

Добавил все объяснения к ответу, рад, что это сработало для вас.

Wiktor Stribiżew 21.02.2019 11:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать одно из следующих решений sed или awk:

grep 'ADCET$' input.txt | sed 's/^\([^|]*\)\(|.*|\)\([^|]*\)$/\3\2\1/'
grep 'ADCET$' input.txt | awk 'BEGIN {OFS=FS = "|"} {temp=$NF;$NF=$1;$1=temp;}1'

См. онлайн демо

awk подробности

  • BEGIN {OFS=FS = "|"} - разделитель полей установлен на | и для вывода будет использоваться тот же символ
  • {temp=$NF;$NF=$1;$1=temp;}1:
    • temp=$NF; - последнее значение поля присваивается переменной temp
    • $NF=$1; - в последнем поле установлено значение поля 1
    • $1=temp; - значение поля 1 установлено в temp
  • 1 - заставляет awk записывать вывод.

sed подробности

  • ^ - начало строки
  • \([^|]*\) - Группа захвата 1: любые символы 0+, кроме |
  • \(|.*|\) - Группа захвата 2: |, затем любые символы 0+, а затем |
  • \([^|]*\) - Capturing group 3: any 0+ chars other than|`
  • $ - конец строки.

\3\2\1 — это заполнители для значений, захваченных в группы 1, 2 и 3.

Другие вопросы по теме