for f in 20*.txt
do
sed -n '1p' "$f" | cut -d' ' -f3 >> displayStudentInfo.txt
head -3 "$f" | tail -2 >> displayStudentInfo.txt
done
cat displayStudentInfo.txt
rm displayStudentInfo.txt
printf "\n"
Quando uso esse código, ele me dá metade do que está dentro do arquivo, mas se eu tentar, cat
posso ver meus resultados por completo. Além disso, como posso listar todos os arquivos em uma linha em vez de ter as três primeiras linhas?
Por exemplo:
ID
Name
Grade
Quero colocar tudo em uma linha:
ID Name Grade
Se eu usar este código, head displayStudentInfo.txt
ele me dará metade do que está dentro do arquivo:
201700128
GPA: 3.2
Major: Pharmacy
201703451
GPA: 2.2
Major: Political Science
201759284
GPA: 3.4
Major: Marketing
201800082
deveriam ser 9 alunos diferentes e não sei como colocar id, especialização e GPA em uma linha.
Responder1
Você resolveu sua tarefa, mas deixou em aberto uma pergunta que ninguém pode responder sem as informações necessárias. Este site serve como um arquivo para outras pessoas que procuram uma resposta para seus problemas, então é chato deixar perguntas em aberto como esta.
Aproveito para demonstrar a fraqueza de sua tentativa. Por exemplo, você mistura ferramentas sem vantagem:
sed -n '1p' "$f" | cut -d' ' -f3 >> displayStudentInfo.txt
head -3 "$f" | tail -2 >> displayStudentInfo.txt
A primeira linha mostra que você sabe como usar sed
para obter certas linhas, então por que você usa aquela combinação desajeitada e difícil de ler de head
e tail
na segunda linha? Obviamente sed -n '2p;3p'
faria o mesmo trabalho. Ou você pode escrever sed '2,3!d'
para excluir todas as curtidas, exceto o intervalo da linha 2 a 3.
Claro, sed
também é possível extrair o terceiro campo da primeira linha como sed -E '1!d;s/([^ ]* ){2}//;s/ .*//'
(remover os 2 primeiros campos e depois tudo atrás do primeiro campo), o que não é nenhuma simplificação neste ponto, mas facilitará se você quiser combinar todas as três partes para uma linha e até mesmo se livrar do for
loop:
sed -sE '1!d;s/([^ ]* ){2}//;s/ .*//;N;N;s/\n/\t/g' 20*.txt
sed
( Sintaxe GNU com opção -s
de tratar arquivos separadamente e \t
de usar uma aba como separador de campos na saída). Não há necessidade de percorrer diferentes ferramentas e ter arquivos temporários, simplesmente extrair o terceiro campo, anexar mais duas linhas e substituir as novas linhas por tabulações.