2017-03-24 1 views
0

나는 다음과 같은 포함 file라는 이름의 텍스트 파일이 있습니다추출 값은 열

Australia    AU 10 
New Zealand   NZ 1 
... 

나는 첫 번째 열에서 국가 이름을 추출하기 위해 다음 명령을 사용하는 경우 :

awk '{print $1}' file 
을 각 나라 이름의

Australia 
New 
... 

만 첫 번째 단어가 출력 :

나는 다음과 같은 얻을.

전체 국가 이름은 어떻게받을 수 있습니까?

+0

을 그 삭제할 수 있습니다 필드 분리 기호가 무엇인지 알려줄 필요가 있습니다. –

답변

1

이 시도 :

$ awk '{print substr($0,1,15)}' file 
Australia 
New Zealand 
+0

공백을 제거하는 데 필요한 덕분에 감사합니다. –

+0

awk '{print substr ($ 0,1,22)}'| awk NF –

+0

@ p.Trinx : 분명히 밝혀야한다 : awk '{print substr ($ 0,1,22)}'파일 | awk NF' 명령은 이전 주석에서 뒤 ​​공백을 제거하지 않습니다 ('| awk NF' 부분은 샘플 데이터와 함께 유효한 no-op입니다). 그러나 여기에있는 다른 응답들은 어떻게 다듬을 지 보여줍니다. – mklement0

0

Raymond Hettinger's helpful POSIX-compliant answer을 보완하기 위해 :

그것은 국가 이름 컬럼과 같은 23 개 개의 문자 넓다.

간단한 경우

, 당신이 공백 후행 트림 필요가없는 경우 당신은 할 수 cut 단지 사용 :

# Works, but has trailing whitespace. 
$ cut -c 1-23 file 
Australia    
New Zealand    

주의 할 : GNUcut이 UTF-8 아니다 그렇기 때문에 입력이 UTF-8로 인코딩되고 비 ASCII 문자가 포함되어 있으면 위의 내용이 올바르게 작동하지 않습니다.

# Trailing whitespace is trimmed. 
$ awk -v FIELDWIDTHS=23 '{ sub(" +$", "", $1); print $1 }' file 
Australia 
New Zealand 
  • FIELDWIDTHS=23$1에 반영 첫 번째 필드를 (선언


    공백 후행 트림 하려면 GNU의awk의 비표준 FIELDWIDTHS 변수를 활용할 수 있습니다)를 23 자 너비로 지정하십시오.

  • sub(" +$", "", $1) 다음 빈 문자열 필드 ($1)의 단부에 자리의 임의의 비어 있지 않은 런 (" +")를 대체하여 $1에서 후행 공백 제거한다.

그러나 Linux 배포판에는 GNU Awk가 아닌 Mawk가있을 수 있습니다. 어느 하나인지 확인하려면 awk -W version을 사용하십시오.

# Trailing whitespace is trimmed. 
$ awk '{ c=substr($0, 1, 23); sub(" +$", "", c); print c}' file 
Australia 
New Zealand 
1

awk 'NF>2 && NF-=2' file 

NF>2는 마지막 두 개의 열을 없애 : 공백 후행 트림이, 레이몬드의 답변을 확장 POSIX 호환 솔루션을


2 개 이상의 필드가있는 레코드를 필터링하는 가드입니다. '[\ t] +' ' ' '당신을 단지 {$ 1 인쇄} `된 awk -F를 : 데이터가 일관성이있을 경우 당신은 당신의 AWK이 같은 시도, 단순히

awk 'NF-=2' file 
+1

굉장하고 공백이 없습니다. 감사. –