Cut 명령의 "필드"는 무엇으로 구성됩니까?

Cut 명령의 "필드"는 무엇으로 구성됩니까?

예를 들어, 이 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

관련 정보