awk 또는 sed를 사용하여 첫 번째 열의 공백을 인쇄하는 방법

awk 또는 sed를 사용하여 첫 번째 열의 공백을 인쇄하는 방법

다음은 샘플 입력 파일입니다.

ip.txt:

john    math
        science
paul    math
        science
rosy    math
jill    science
rob     math
        science
hary    math

원하는 출력:

john

paul

rosy
jill
rob

hary

내가 사용할 때 :

awk '{print $1}' ip.txt

내 결과는 다음과 같습니다

john
science
paul
science
rosy
jill
rob
science
hary

두 번째 열 값을 인쇄하고 싶지 않고 파일에 공백을 인쇄하고 싶습니다.

이 목표를 어떻게 달성할 수 있나요? 저는 솔라리스 5.10과 ksh.

답변1

이상한:

awk '{print (NF>1) ? $1 : ""}' file

필드 수가 1보다 크면 첫 번째 필드를 인쇄하고, 그렇지 않으면 빈 줄을 인쇄합니다.

몇 가지 추가 생각:

  • 데이터가 탭으로 구분되어 있으면

    awk -F '\t' '{print $1}' file
    
  • 처음 8자를 추출하려면

    awk '{print substr($0,1,8)}' file
    

답변2

POSIX sed 사용:

sed -e 's/^\([^[:blank:]]*\)[[:blank:]].*/\1/;t' -ed <file

답변3

제목 필드 앞에 추가 공백을 모두 추가하려면 다음을 수행할 수 있습니다.

grep -o "^[^ ]* \+" ip.txt

추가 공간을 원하지 않는 경우:

sed 's/ \+.*//' ip.txt

둘 다 빈 이름 필드가 있는 행을 유지합니다.

관련 정보