이전에 이 질문을 받았다면 정말 죄송합니다. 너무 기본적인 것 같고 점들을 연결하지 않아서 미칠 것 같아서요!
기본적으로 텍스트 파일이 있고 특정 줄의 두 번째 필드를 변수에 할당합니다.
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
.