AWK 사용: 다양한 수의 연결된 필드를 변수에 할당

AWK 사용: 다양한 수의 연결된 필드를 변수에 할당

이전에 이 질문을 받았다면 정말 죄송합니다. 너무 기본적인 것 같고 점들을 연결하지 않아서 미칠 것 같아서요!

기본적으로 텍스트 파일이 있고 특정 줄의 두 번째 필드를 변수에 할당합니다.

VAR=$(awk 'NR==1 {print $2}' entry.txt)

그러나 때로는 텍스트 파일의 첫 번째 줄에 4개의 필드가 있는 경우도 있습니다. 나는 말하고 싶다

   If ROW 1 has 4 fields  
        VAR = $2, $3 & $4 concatenated
   Else
        VAR = $2 

나는 이것이 기본적인 awk라고 확신합니다. 저는 단지 작은 프로젝트를 진행 중이고 이전에 사용한 적이 없습니다. 책을 읽어야 한다는 건 알지만 이건 정말 작은 대본이에요!

감사해요

답변1

awk 'NF == 4 { print $2 $3 $4; exit } { print $2; exit }' file

파일의 첫 번째 줄에 정확히 4개의 공백으로 구분된 필드가 있는 경우 두 번째, 세 번째, 네 번째 필드가 연결됩니다. 그렇지 않으면 파일 첫 번째 줄의 두 번째 필드를 반환합니다. 프로그램은 아무것도 인쇄한 후 종료되므로 이것이 우리가 보는 첫 번째 줄일 뿐이라고 확신합니다.

다른 논리로:

awk 'NF == 4 { out = $2 $3 $4 } NF != 4 { out = $2 } { print out; exit }' file

또는,

awk '{ out = $2 } NF == 4 { out = out $3 $4 } { print out; exit }' file

다음 명령 중 하나가 명령 대체에 포함됩니다.

var=$( awk ... )

답변2

awk 'NR==1 && NF==4 { var=$2 $3 $4 } NR==1 && NF!=4 { var=$2 }' /path/to/input

답변3

넌 할 수있어

awk '{$1=""; print (NF==4)?$0:$2; exit}' OFS= infile

삼항 조건 연산자는 (NF==4)?$0:$2다음을 확인합니다.질소수량에프필드가 4와 같음(필드가 공백으로 구분된 경우(기본FS$0) ) 그런 다음 첫 번째 필드를 제거한 후 전체 줄을 인쇄하고 $1="", 그렇지 않으면 :file#2를 인쇄합니다 $2.

관련 정보