답변:
용어 "필드는"종종 같은 도구와 관련된 배 cut
와 awk
. 데이터를 가져 와서 특정 문자를 사용하여 구분하면 필드는 열에 해당하는 데이터와 유사합니다. 일반적으로이 작업에 사용 된 문자는 Space입니다.
그러나 대부분의 도구와 마찬가지로 구성 할 수 있습니다. 예를 들면 다음과 같습니다.
awk -F"," ...
-쉼표로 구분됩니다 (예 :) ,.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
를 통해 지정된 구분 문자가 포함되지 않은 행은 인쇄하지 않도록 지시 -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.
POSIX에 따른 필드 IFS
는 " 입력 필드 구분 기호 (또는 내부 필드 구분 기호 ) " 의 문자로 구분되는 행의 일부입니다 . 이 값의 기본값은 공백, 가로 표 작성기 및 줄 바꿈입니다. . Bash를 사용하면 printf '%q\n' "$IFS"
값을 볼 수 있습니다 .
cut
질문에 의해 사용 되지 는 않습니다 .
cut -d "$IFS"
오류가 발생하지 반면, awk -F"[ \t\n]"
예상대로 작품
해당 유틸리티에 따라 다르지만 cut
, "필드"는 텍스트 줄의 시작 부분에서 시작하며 첫 번째 탭까지 모든 것을 포함합니다. 두 번째 필드는 첫 번째 탭 다음 문자부터 다음 탭까지 이어집니다. 셋째, 넷째, ... 탭 사이 또는 행 시작과 탭 사이 또는 탭과 행 끝 사이의 모든 것.
"-d"옵션을 사용하여 필드 구분 기호를 지정하지 않으면 cut -d: -f2
첫 번째와 두 번째 콜론 ( ':') 문자 사이의 모든 것을 얻을 수 있습니다.
다른 유틸리티에는 다른 정의가 있지만 탭 문자가 일반적입니다. 하나 이상의 공백 문자를 기준으로 필드 를 나누기 때문에 너무 엄격한 awk
경우 좋은 대체입니다. 그것은 많은 상황에서 조금 더 자연 스럽지만 약간의 구문을 알아야합니다. 에 따른 제 2 필드를 인쇄하려면 :cut
awk
awk
awk '{print $2}'
sort
나를 속이는 사람입니다. 현재의 sort
맨 페이지에는 필드 구분 기호에 대해 "비 공백에서 비 공백으로 전환"과 같은 내용이 있습니다. 어떤 이유로 sort
필드를 올바르게 정의 하려면 몇 번의 시도가 필요 합니다. join
분명히 "공백으로 구분 된"필드를 사용하는데, 이는 awk
기본적으로 취해야 할 일입니다.
이야기의 도덕은 조심해야하며 모르는 경우 실험해야합니다.
cut
명령을 사용하면 두 가지 주요 인수가 필요합니다
-d : 구분 기호를 나타냅니다
-f : 입력 파일에서 잘라낼 필드를 나타냅니다.
Ex. cut - d "|" - f1, 2 input_filename
여기서는 output
구분 기호 "|"로 구분됩니다. 입력 파일에서 2 개의 필드 만 잘라냅니다.
파일에 다음 줄이있는 경우
Alex|120000|Admin|1999
그런 다음 2 개의 필드를 자릅니다.
Alex|120000
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
옵션 오해하기 쉽다.
echo '$IFS' | cat -vet
기본값이 어떻게 보이는지 확인하십시오shell
.