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

时间:2019-02-21 09:45:47

标签: terminal grep command-line-interface fetch

我有一个名为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 :(得分:1)

您可以使用以下sedawk解决方案之一:

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

请参见online demo

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中的值的占位符。