Terminal 从特定文件获取值并在终端中显示交换的值

Terminal 从特定文件获取值并在终端中显示交换的值,terminal,grep,command-line-interface,fetch,Terminal,Grep,Command Line Interface,Fetch,我有一个名为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,它提供了

我有一个名为
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
,但没有得到所需的输出


您可以使用以下
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=温度-字段1的值设置为
      temp
  • 1
    -使
    awk
    写入输出
sed
详细信息

  • ^
    -行首
  • \([^ |]*\)
    -捕获组1:除
    \
  • \(|.*124;\)
    -捕获组2:
    ,然后是任何0+字符,然后是一个
  • \([^ |]*\)-捕获组3:除
    |`
  • $
    -行结束

\3\2\1
是组1、2和3中捕获的值的占位符。

可能会看到:对于反转逗号分隔值的函数(可以通过regexp自定义分隔符)。@WiktorStribiżew
grep'ADCET$'input.txt | tac
垂直交换它。这不是预期的输出。@dth input.txt文件包含
分隔值,而不是
分隔值。
|sed's/^\([^ |]*\)\([^.]*\)\([^ |]*\)$/\3\2\1/'
?@WiktorStribiż。你能详细解释一下吗?这样我就可以把它标为正确答案了。