BASH에서 'cut'으로 'tab'구분 기호를 정의하는 방법은 무엇입니까?


답변:


301

두 가지 방법:

Ctrl+ V를 누른 다음을 누릅니다 Tab.

cut -f2 -d'   ' infile

또는 다음과 같이 작성하십시오.

cut -f2 -d$'\t' infile

10
$ ''— bash'ism, AFAIR
poige

8
Windows (예 : Git Bash)에서는 분명히 작동하지 않습니다. @Mikel의 대답을 거기에 사용하십시오 (기본 구분 기호는 탭이며 간단히 -d인수 를 생략합니다 ).
Ahmed Fasih


4
@poige,는 ksh93아닙니다 bash. 그것은 적어도 ksh93, zsh, bash, mksh 및 FreeBSD sh에서 지원됩니다 ( 의 POSIX 표준 사양의 다음 주요 버전으로 만들 수 있습니다sh ).
Stéphane Chazelas


191

탭이 기본값입니다.

참고 항목 컷 맨 페이지를 .

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

그래서 당신은 작성해야합니다

cut -f 2

2
죄송합니다.
무하마드 하산 칸

4
그러나 가독성과 이식성을 위해 이러한 플래그를 명시 적으로 언급하는 것이 항상 더 안전 할 것입니다. cutWindows 용으로 디자인하는 일부 사람들 이 완전한 표준을 따르지 않을 것이라고 상상할 수 있습니다 .
Willem Van Onsem

3
가장 간단한 코드, 가장 간단한 설명 : 대답을 받아 들여야합니다. 나중에 그것을 못 박았다 : youtube.com/watch?v=dpNTHl7y45Y
neuronet

5
이 답변은 내 인생을 바꿨습니다
matheeeny

1
누군가의 버전을 쓰는 경우 @WillemVanOnsem는 cutWindows 용 및 따르지 않는 POSIX 사양 그것을 위해를한다고 가정 할 이유가없는 모든 POSIX 스크립트는 해당 시스템과 함께 작동합니다. POSIX 지정 기능을 고수하십시오. 가상의 미래 비준수 구현을 허용하려고 시도하지 마십시오. 그것이 "이동성"의 의미가 아닙니다.
와일드 카드

12
awk -F '\t' '{ print $2 }' inputfile

그러면에서 각 입력 행의 두 번째 탭으로 구분 된 필드가 추출됩니다 inputfile.


10

보다 일반적으로 보이지 않는 문자를 요구하지 않고 : tr구분 기호를보다 쉽게 ​​지정할 수있는 형식으로 변환하는 데 사용하십시오 cut.

$ echo -e "a\tb\tc" |tr '\t' ' ' |cut -d' ' -f2
b

tr 간단하지만 강력한 문자 매칭 및 대체 도구입니다.


1
그러나 입력이 있다면 어떻게 abc(space)def(tab)ghi될까요? 당신의 대답은 산출 할 def것이지만, 산출 할 것 ghi입니다. 마찬가지로 입력 값이 ABC(tab)DEF(space)GHI이면 답은 DEF이지만 산출량은 DEF(space)GHI입니다.
G-Man

@ G-Man : 스페이스 구분자는 단지 예일뿐입니다. 데이터에 적합한 구분 기호를 사용하십시오 (예 : 쉼표). echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
nobar

...하지만 예, 구분 기호가 탭이어야하는 경우 내 접근 방식이 작동하지 않습니다.
nobar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.