我有一个名为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
,但没有得到所需的输出
答案 0 :(得分: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'
请参见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中的值的占位符。