Bab*_*ish 4 scripting ubuntu awk grep
显示ore在以地点名称结尾的地点工作的所有员工的详细信息
EmpID:Name:Designation:UnitName:Location:DateofJoining:Salary
1001:Thomson:SE:IVS:Mumbai:10-Feb-1999:60000
1002:Johnson:TE::Bangalore:18-Jun-2000:50000
1003:Jackson:DM:IMS:Hyderabad:23-Apr-1985:90000
1004:BobGL::ETA:Mumbai:05-Jan-2004:55000
1005:Alice:PA:::26-Aug-2014:25000
1006:LilySE:IVS::Bangalore:17-Dec-2015:40000
1007:Kirsten:PM:IMS:Mumbai:26-Aug-2014:45000
1004:BobGL::ETA:Mumbai:05-Jan-2021:55000
Run Code Online (Sandbox Code Playgroud)
预期输出:
1002:Johnson:TE::Bangalore:18-Jun-2000:50000
1006:LilySE:IVS::Bangalore:17-Dec-2015:40000
Run Code Online (Sandbox Code Playgroud)
这是我试过的代码,它只显示位置,但我想要完整的细节
cut -d ":" -f4 employee.txt | grep 'ore\>'
Run Code Online (Sandbox Code Playgroud)
编辑:已解决
grep "`cut -d ":" -f5 employee.txt | grep 'ore\>'`$" employee.txt
Run Code Online (Sandbox Code Playgroud)
得到输出:
1002:Johnson:TE::Bangalore:18-Jun-2000:50000
1006:LilySE:IVS::Bangalore:17-Dec-2015:40000
Run Code Online (Sandbox Code Playgroud)
谢谢大家的帮助:)
这里一个非正则表达式的方法使用awk:
awk -F: -v s="ore" '(n=index($5,s)) && (n + length(s)-1) == length($5)' file
1002:Johnson:TE::Bangalore:18-Jun-2000:50000
1006:LilySE:IVS::Bangalore:17-Dec-2015:40000
Run Code Online (Sandbox Code Playgroud)
细节:
index($5,s)函数ore在$5每行的第五列中查找输入字符串的位置(index($5,s) + length(s)-1) == length($5)检查是为了确保ore是$5正则表达式方法会更简单:
awk -F: -v s="ore" '$5 ~ s "$"' file
Run Code Online (Sandbox Code Playgroud)
我们可以awk在这里使用这个简单的解决方案。根据 OP 的要求,没有正则表达式方法。简单的解释是:检查第 5 个字段的最后 3 个字符是否为 ore 然后打印该行。
awk 'BEGIN{FS=OFS=":"} substr($5,length($5)-2)=="ore"' Input_file
Run Code Online (Sandbox Code Playgroud)
通用答案:根据 Ed 先生的好建议,在此处添加更通用的解决方案。可以根据字符串设置尾部值的位置需要查看。
awk 'BEGIN{FS=OFS=":"; tail="ore"} substr($5,length($5)-length(tail)+1)==tail' Input_file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |