절단 명령의 '필드'는 무엇입니까?


16

예를 들어, cut명령은 -f 매개 변수를 사용할 수 있습니다.man

이 필드 만 선택하십시오. -s 옵션이 지정되지 않은 경우 구분 문자가없는 행을 인쇄하십시오.

이와 관련하여 필드 란 무엇입니까?

답변:


19

용어 "필드는"종종 같은 도구와 관련된 배 cutawk. 데이터를 가져 와서 특정 문자를 사용하여 구분하면 필드는 열에 해당하는 데이터와 유사합니다. 일반적으로이 작업에 사용 된 문자는 Space입니다.

그러나 대부분의 도구와 마찬가지로 구성 할 수 있습니다. 예를 들면 다음과 같습니다.

  • awk = awk -F"," ...-쉼표로 구분됩니다 (예 :) ,.
  • cut = cut -d"," ...-쉼표로 구분합니다 (예 :) ,.

첫 번째는 awk공백에서 자동 분할되는 방법을 보여줍니다 .

$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.

이것은 cut공간에서 어떻게 분할 되는지 보여줍니다 .

$ echo "The rain in Spain." | cut -d" " -f1,4
The Spain.

여기에 cut열 1과 4를 반환 하는 데 사용 하는 열 데이터의 CSV 목록이 있습니다.

$ echo "col1,col2,col3,co4" | cut -d"," -f1,4
col1,co4

Awk도 이것을 할 수 있습니다 :

$ echo "col1,col2,col3,co4" | awk -F"," '{print $1","$4}'
col1,co4

Awk는 또한 다양한 분리 문자를 다루는 데 조금 더 능숙합니다. 여기가 다루는 것 Tabs와 함께 Spaces그들이 동시에 간 혼합있어 여기서

$ echo -e "The\t rain\t\t in Spain." | awk '{print $1" "$4}'
The Spain.

잘라 내기위한 -s 스위치는 어떻습니까?

이 스위치와 관련하여 스위치 cut를 통해 지정된 구분 문자가 포함되지 않은 행은 인쇄하지 않도록 지시 -d합니다.

이 파일이 있다고 가정 해 봅시다.

$ cat sample.txt 
This is a space string.
This is a space   and   tab string.
Thisstringcontainsneither.

참고 : 위의 두 번째 문자열에는 공백과 탭이 있습니다.

이제 스위치 를 cut사용하거나 사용하지 않고 이러한 문자열을 처리 할 때 -s:

$ cut -d" " -f1-6 sample.txt 
This is a space string.
This is a space  
Thisstringcontainsneither.

$ cut -d" " -f1-6 -s sample.txt 
This is a space string.
This is a space  

두 번째 예에서 -s스위치가 출력에서 ​​구분 기호를 포함하지 않는 문자열을 생략 했음을 알 수 있습니다 Space.


8

POSIX에 따른 필드 IFS는 " 입력 필드 구분 기호 (또는 내부 필드 구분 기호 ) " 의 문자로 구분되는 행의 일부입니다 . 이 값의 기본값은 공백, 가로 표 작성기 및 줄 바꿈입니다. . Bash를 사용하면 printf '%q\n' "$IFS"값을 볼 수 있습니다 .


에서 echo '$IFS' | cat -vet 기본값이 어떻게 보이는지 확인하십시오 shell.
C0deDaedalus

1
IFS는 대부분의 목적을 위해 쉘에서 사용되지만 다른 프로그램에서는 사용되지 않으며 특히 cut질문에 의해 사용 되지 는 않습니다 .
dave_thompson_085

그래서 AWK는 달리, 컷은 한 번에 하나 개의 구분 기호를 지원 cut -d "$IFS"오류가 발생하지 반면, awk -F"[ \t\n]"예상대로 작품
JGurtz

2

해당 유틸리티에 따라 다르지만 cut, "필드"는 텍스트 줄의 시작 부분에서 시작하며 첫 번째 탭까지 모든 것을 포함합니다. 두 번째 필드는 첫 번째 탭 다음 문자부터 다음 탭까지 이어집니다. 셋째, 넷째, ... 탭 사이 또는 행 시작과 탭 사이 또는 탭과 행 끝 사이의 모든 것.

"-d"옵션을 사용하여 필드 구분 기호를 지정하지 않으면 cut -d: -f2첫 번째와 두 번째 콜론 ( ':') 문자 사이의 모든 것을 얻을 수 있습니다.

다른 유틸리티에는 다른 정의가 있지만 탭 문자가 일반적입니다. 하나 이상의 공백 문자를 기준으로 필드 를 나누기 때문에 너무 엄격한 awk경우 좋은 대체입니다. 그것은 많은 상황에서 조금 더 자연 스럽지만 약간의 구문을 알아야합니다. 에 따른 제 2 필드를 인쇄하려면 :cutawkawk

awk '{print $2}'

sort나를 속이는 사람입니다. 현재의 sort맨 페이지에는 필드 구분 기호에 대해 "비 공백에서 비 공백으로 전환"과 같은 내용이 있습니다. 어떤 이유로 sort필드를 올바르게 정의 하려면 몇 번의 시도가 필요 합니다. join분명히 "공백으로 구분 된"필드를 사용하는데, 이는 awk기본적으로 취해야 할 일입니다.

이야기의 도덕은 조심해야하며 모르는 경우 실험해야합니다.


2

"필드"라는 용어는 일반적으로 리눅스와 관련이 없으며 특정 프로그램과 관련이 있습니다. 따라서 cut와 다른 종류의 필드를 사용합니다 sort.

을 사용하면 cut각 행에서 필드를 구분하는 -d 옵션을 사용하여 필드 구분 기호를 지정하여 필드를 직접 정의 할 수 있습니다.

데이터가 행에서 콜론으로 분리 된 경우 다음 -d과 같이 -f필드 (또는 열) 2, 3 및 6을 결합 하여 얻을 수 있습니다.

echo 'a:b:c::d:e:f' | cut -d : -f 2-3,6

1

cut명령을 사용하면 두 가지 주요 인수가 필요합니다

-d : 구분 기호를 나타냅니다

-f : 입력 파일에서 잘라낼 필드를 나타냅니다.

Ex. cut - d "|"  - f1, 2 input_filename

여기서는 output구분 기호 "|"로 구분됩니다. 입력 파일에서 2 개의 필드 만 잘라냅니다.

파일에 다음 줄이있는 경우

Alex|120000|Admin|1999

그런 다음 2 개의 필드를 자릅니다.

Alex|120000

잘못된 공백으로 인해 예제가 완전히 손상되었으며 올바른 경우에도 4 년 전의 답변에 아무것도 추가하지 않습니다.
dave_thompson_085

0

cut구분 기호가 단일 문자이고 입력 필드의 하위 집합을 동일한 순서로 출력하려는 ​​간단한 경우에 좋습니다 (을 지정하더라도 ) -f3,2,1와 동일하게 작동합니다 -f1,2,3.

awk예를 들어 입력 필드 구분 기호가 공백 awk일 수 있거나 (또는 ​​기본값) 다른 순서로 또는 특정 형식으로 필드를 출력하려는 ​​경우 한 줄 짜리가 훨씬 유연 합니다.

예를 들어 wc -l myfile | awk '{print $1}'또는 ls -l file1 file2 | awk '{printf "%s,%s:%s\n", $9, $7, $3}'매우 간단하지만와 관련이 없습니다 cut.

필드 / 키가 sort알아 내기 어려운 초기 포스터에 동의합니다 ! 의 필드 join에서와 같은 제대로 작동 cut하지만, join옵션 오해하기 쉽다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.