예를 들어, 이 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
이는 좋은 대체 방법입니다 . 대부분의 경우 이는 더 자연스럽지만 몇 가지 구문을 알아야 합니다. 다음에 따라 두 번째 필드를 인쇄하려면:cut
awk
awk
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