programing

'cut' 명령을 사용하여 동일한 순차 구분 기호를 하나로 처리하려면 어떻게 해야 합니까?

fastcode 2023. 4. 10. 22:16
반응형

'cut' 명령을 사용하여 동일한 순차 구분 기호를 하나로 처리하려면 어떻게 해야 합니까?

열 기반 '스페이스' 조정 텍스트 스트림에서 특정 필드(4번째)를 추출하려고 합니다.지금 있어요.cut

cat text.txt | cut -d " " -f 4

★★★★★★★★★★★★★★★★★★★.cut에서는 여러 개의 공백이 하나의 딜리미터로 처리되지 않습니다.awkawk를 통해

awk '{ printf $4; }'

또는 sed

sed -E "s/[[:space:]]+/ /g"

할 수 , 해야 할지 cut여러 개의 구분 기호를 사용할 수 있습니까?

시험:

tr -s ' ' <text.txt | cut -d ' ' -f4

tr 페이지 man "display" :

-s, --syslog-syslog는 반복되는 문자의 각 입력 시퀀스를 바꿉니다.SET1에 1회만 리스트 되어 있습니다.그런 성격의

처럼, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」awk정말 좋은 방법이에요.「」를 cut 할 수 있다tr -s케브의 대답처럼 공간을 비집고 들어가죠

하지만 미래의 독자들을 위해 가능한 모든 조합을 살펴보도록 하겠습니다.자세한 내용은 테스트 섹션을 참조하십시오.

tr | 절단

tr -s ' ' < file | cut -d' ' -f4

아악

awk '{print $4}' file

때리다

while read -r _ _ _ myfield _
do
   echo "forth field: $myfield"
done < file

sed의

sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' file

테스트

이 파일을 사용하여 다음 명령을 테스트합니다.

$ cat a
this   is    line     1 more text
this      is line    2     more text
this    is line 3     more text
this is   line 4            more    text

tr | 절단

$ cut -d' ' -f4 a
is
                        # it does not show what we want!


$ tr -s ' ' < a | cut -d' ' -f4
1
2                       # this makes it!
3
4
$

아악

$ awk '{print $4}' a
1
2
3
4

때리다

그러면 필드가 순차적으로 읽힙니다.「」를 사용해 ._이러한 필드를 무시하기 위한 "변수"로서 이 변수가 일회용 변수임을 나타냅니다. 해서 ★★★★★★★★★★★★★★★★★★★★★★★.$myfield을 사용하다이 필드 사이에 공백이 있는 경우에도 마찬가지입니다.

$ while read -r _ _ _ a _; do echo "4th field: $a"; done < a
4th field: 1
4th field: 2
4th field: 3
4th field: 4

sed의

하면 되며 공백은 .([^ ]*[ ]*){3}다음에 네 으로 4번째 칸으로 가 됩니다.\1.

$ sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' a
1
2
3
4

최단/최적의 해결책

ofationsationsationsationsationsationsationsationsations의 제약이 너무 된 후cut나는 스테로이드 복용을 줄여야 한다고 주장한 내 후임자를 직접 썼다.

절단하다는 이 문제와 관련된 많은 cut/contract 문제에 대한 가장 미니멀리즘적인 해결책을 제공합니다.

많은 예 중에서, 이 특정 질문에 대처하는 것은 다음과 같습니다.

$ cat text.txt
0   1        2 3
0 1          2   3 4

$ cuts 2 text.txt
2
2

cuts 는 다음을 지원합니다.

  • 파일에서 가장 일반적인 필드 구분자 자동 삭제(+ 기본값 재정의 기능)
  • multi-char, mixed-char 및 regex 일치 구분자
  • 여러 파일에서 혼합 구분 기호를 사용하여 열 추출
  • 라인 시작과 더불어 라인 끝에서 오프셋(음수 사용)
  • (「」를 호출할 )paste별매)
  • 필드 순서 변경 지원
  • 사용자가 개인 설정을 변경할 수 있는 설정 파일
  • 사용자 친화성에 중점을 두고 최소한의 입력만 필요

훨씬 더 많이요.어느 것도 표준 사양이 아닙니다.cut.

참고 항목: https://stackoverflow.com/a/24543231/1296044

소스 및 문서 (무료 소프트웨어): http://arielf.github.io/cuts/

다음 Perl 원라이너에서는 Perl이 awk와 얼마나 밀접하게 관련되어 있는지를 보여 줍니다.

perl -lane 'print $F[3]' text.txt

하지만, 그@F자동 플릿 배열이 인덱스에서 시작됩니다.$F[0]awk 필드가 로 시작되는 동안$1

버전 포함cut나도 알아, 아니, 이건 불가능해 cut는 주로 구분자가 공백이 아닌 파일을 해석할 때 유용합니다(예:/etc/passwd필드 수가 고정되어 있습니다.두 개의 구분자가 연속되어 있으면 빈 필드를 의미하며, 공백에도 해당됩니다.

언급URL : https://stackoverflow.com/questions/4143252/how-to-make-the-cut-command-treat-same-sequental-delimiters-as-one

반응형