절반 출력 결과 문제를 해결하는 방법

절반 출력 결과 문제를 해결하는 방법
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"

이 코드를 사용하면 파일 내부 내용의 절반이 제공되지만 시도하면 cat결과를 완전히 볼 수 있습니다. 또한 첫 번째 줄 3개 대신 모든 파일을 한 줄에 나열하려면 어떻게 해야 합니까?

예를 들어:

ID
Name
Grade

대신 모든 것을 한 줄로 나열하고 싶습니다.

ID Name Grade

이 코드를 사용하면 head displayStudentInfo.txt 파일 내부 내용의 절반이 제공됩니다.

201700128
GPA: 3.2
Major: Pharmacy
201703451
GPA: 2.2
Major: Political Science
201759284
GPA: 3.4
Major: Marketing
201800082

학생이 9명이라고 하는데 ID, 전공, GPA를 한 줄에 어떻게 입력해야 할지 모르겠습니다.

답변1

작업을 해결했지만 필요한 정보 없이는 누구도 대답할 수 없는 질문을 남겨 두었습니다. 이 사이트는 문제에 대한 답을 찾는 다른 사람들을 위한 아카이브 역할을 하기 때문에 이와 같은 공개 질문을 남기는 것은 짜증나는 일입니다.

나는 당신의 시도의 위대함을 보여줄 기회를 얻습니다. 예를 들어 이점 없이 도구를 혼합합니다.

sed -n '1p' "$f" | cut -d' ' -f3 >> displayStudentInfo.txt
head -3 "$f" | tail -2 >> displayStudentInfo.txt

첫 번째 줄은 특정 줄을 얻는 데 사용하는 방법을 보여줍니다 . 그런데 왜 두 번째 줄에 와 sed의 어색하고 읽기 어려운 조합을 사용합니까 ? 분명히 같은 일을 할 것입니다. 아니면 2행부터 3행까지의 범위를 제외한 모든 좋아요를 삭제하도록 작성할 수도 있습니다 .headtailsed -n '2p;3p'sed '2,3!d'

물론 sed첫 번째 줄의 세 번째 필드를 추출할 수도 있습니다 sed -E '1!d;s/([^ ]* ){2}//;s/ .*//'(처음 2개 필드를 제거한 다음 첫 번째 필드 뒤의 모든 항목 제거). 이 시점에서는 단순화되지 않지만 세 부분을 모두 결합하려는 경우 더 쉽게 할 수 있습니다. 한 줄로 만들고 루프를 제거할 수도 있습니다 for.

sed -sE '1!d;s/([^ ]* ){2}//;s/ .*//;N;N;s/\n/\t/g' 20*.txt

( 파일을 별도로 처리하고 출력에서 ​​탭을 필드 구분 기호로 사용하는 옵션이 있는 GNU sed구문 ). 다른 도구를 통해 파이프하거나 임시 파일을 가질 필요가 없습니다. 세 번째 필드를 간단히 추출하고 두 줄을 더 추가하고 줄 바꿈을 탭으로 바꾸십시오.-s\t

관련 정보