잘라내기 명령의 '필드'는 무엇으로 구성됩니까?

잘라내기 명령의 '필드'는 무엇으로 구성됩니까?

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

이 필드만 선택하십시오. -s 옵션이 지정되지 않는 한 구분 기호 문자가 포함되지 않은 행도 인쇄합니다.

이런 맥락에서 필드란 무엇입니까?

답변1

"필드"라는 용어는 종종 cut및 같은 도구와 연관됩니다 awk. 데이터를 가져와 특정 문자를 사용하여 구분하는 경우 필드는 데이터 가치가 있는 열과 유사합니다. 일반적으로 이 작업을 수행하는 데 사용되는 문자는 입니다 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.

cut을 위한 -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.

답변2

POSIX에 따른 필드는 다음 문자로 구분된 행의 일부입니다.IFS, "입력 필드 구분 기호(또는내부 필드 구분 기호)." 기본값은 공백, 수평 표 표시기, 개행 문자 순입니다. Bash를 사용하면 printf '%q\n' "$IFS"해당 값을 보기 위해 실행할 수 있습니다.

답변3

해당 유틸리티에 따라 다르지만 의 경우 cut"필드"는 텍스트 줄의 시작 부분에서 시작하고 첫 번째 탭까지의 모든 것을 포함합니다. 두 번째 필드는 첫 번째 탭 뒤의 문자부터 다음 탭까지 실행됩니다. 세 번째, 네 번째 등등... 탭 사이, 줄 시작과 탭 사이, 탭과 줄 끝 사이의 모든 것.

"-d" 옵션으로 필드 구분 기호를 지정하지 않는 한: cut -d: -f2첫 번째와 두 번째 콜론(':') 문자 사이의 모든 내용을 가져옵니다.

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

awk '{print $2}'

sort나를 속이는 사람입니다. 내 현재 sort매뉴얼 페이지에는 필드 구분 기호에 대해 "공백이 아닌 공백으로의 전환"과 같은 내용이 나와 있습니다. 어떤 이유로 sort필드를 올바르게 정의하려면 몇 번의 시도가 필요합니다. 분명히 기본적으로 수행되는 join작업인 "공백으로 구분된" 필드를 사용합니다 .awk

이야기의 교훈은 조심하고, 모르면 실험해 보라는 것입니다.

답변4

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

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

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

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

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

파일에 다음 줄이 있는 경우

Alex|120000|Admin|1999

그런 다음 2개의 필드를 잘라냅니다.

Alex|120000

관련 정보