Извлекать значения из определенного файла и отображать измененные значения в терминале - PullRequest
0 голосов
/ 21 февраля 2019

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

Shriii|Fourth|ADCET
Chaitraliii|Fourth|ADCET
Shubhangi|Fourth|ADCET
Prathamesh|Third|RIT
Tushar|Third|RIT
Sukrut|Second|KIT

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

ADCET|Fourth|Shriii
ADCET|Fourth|Chaitraliii

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

Shriii|Fourth|ADCET
Chaitraliii|Fourth|ADCET

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

Ref1

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете использовать одно из следующих решений 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.

...