Com base no script abaixo:
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
Estou tentando obter os caracteres do campo 4 (UnitName) que começa com S. Estou tentando este código, mas nada acontece:
cat file.txt | sort -t ':' -rk4 | grep -i '^S[A-Za-z]\+s\b'
Preciso de ajuda. Por favor, me avise se o script acima estiver errado. Obrigado, muito apreciado
Isso parece ser um trabalho para
awk
. O comando a seguir deve fazer o que você precisa:Ele diz
awk
para::
como separador de campo$4
) começa ou termina comS
(expressão regular:/^S|S$/
), entãoprint
a linha inteiraSe você quiser imprimir apenas o número do campo 4, use
print $4
em vez de apenasprint
.Seu script original tem os seguintes problemas:
sort -t ':' -rk4
. Ele apenas reordena as linhas no arquivo.grep -i '^S[A-Za-z]\+s\b'
significa que a linha inteira deve começar comS
, seguido por letras somente, seguido porS
, seguido por um limite de palavra. Nenhuma de suas linhas corresponde a esse padrão, então nada será exibido.