awk
아래 표에 있는 행의 식별 번호만 반환하는 명령을 작성해야 합니다 Turtle
. 테이블은 다음 위치에 저장됩니다.turtle.txt
Id Num. Title CatchDate
433417 RedTurtle 2001-06-29
493303 BlueTurtle 1998-09-20
259497 Turtle 1985-05-08
229505 RedTurtle 1994-07-13
473076 OrangeTurtle 2002-03-08
221907 Blueturtle 1999-07-02
457032 Turtle 1993-04-09
490359 RedTurtle 1996-11-12
494595 SnappingTurtle 1985-05-20
402421 BlueTurtle 1999-08-16
답변1
awk를 사용하세요:
$ awk '$2 == "Turtle" {print $1}' turtle.txt
259497
457032
$2
선택할 필드입니다.Turtle
일치하는 텍스트입니다.{print $1}
첫 번째 필드를 인쇄하는 것입니다.turtle.txt
소스 파일의 이름입니다.
sed를 사용하세요:
$ <infile sed -E 's/[[:blank:]]+/\n/g;/([^\n]+\n){1}Turtle/([^\n]*).*/\1/;p};d'
설명하다:
<infile
소스 파일sed -E
POSIX ERE(확장 정규 표현식)와 함께 sed 사용's/[[:blank:]]+/\n/g
+
모든 (실행 중인) 탭 공간을 새 줄로 바꿉니다./([^\n]+\n){1}Turtle\n/
필드n
(여기에 사용됨n-1
)가 일치하는 경우Turtle
(정확히 일치).([^\n]*).*/\1/
필드 1 추출(첫 번째 행)p};d'
선택 사항을 인쇄하고 어떤 경우든 모든 것을 삭제합니다.
모든 필드 합계 쌍에 대한 일반적인 솔루션 n
:m
<infile sed -E 's/[[:blank:]]+/\n/g;/([^\n]+\n){1}Turtle/{s/([^\n]+\n){0}([^\n]*).*/\2/;p};d'
<infile
소스 파일sed -E '
ERE 정규 표현식을 사용하는 sed의 경우.s/[[:blank:]]+/\n/g
모든 입력을 탭이나 공백에서 줄로 나눕니다./([^\n]+\n){1}Turtle/
패턴 공간이 번째 필드와 일치하는 경우 ( 여기서는 ( )n
가 사용됩니다 ).n-1
{1}
{
일련의 명령을 시작합니다.s/
교체(s///
명령)를 시작합니다.([^\n]+\n){0}
m-1
({0}
) 줄을 일치시킵니다 (필드의 경우m
).([^\n]*)
역참조에 남아 있도록 필드(행)를 캡처합니다\2
..*
패턴 공간(원래 줄)의 다른 모든 항목과 일치합니다./\2/
위의 모든 항목(패턴 공간)을\2
.;p};
인쇄해 보세요. 명령 시퀀스를 닫습니다.d
어쨌든 패턴 공간을 삭제하고 다시 시작하세요.'
sed 명령을 종료합니다.
답변2
당신은 그것을 사용할 수 있습니다 :
awk '$2 == "Turtle" {print $1}' file
259497
457032
답변3
sed를 사용하세요:
sed -n '/\sTurtle\s/s/^\([0-9]\+\)\s.*/\1/p' file
답변4
$ awk '$2=="Turtle"&&$0=$1' <file
259497
457032
또는 Isaac과 Goro의 답변을 얻을 때까지 단계적으로 확장하세요.
awk '$2 == "Turtle" && $0 = $1' <file
awk '$2 == "Turtle" { $0 = $1; print }' <file
awk '$2 == "Turtle" { print $1 }' <file
세 가지 모두 없음정확히숫자가 0이면 숫자를 인쇄하지 않는 내 골프 코드와 동일합니다(의 결과가 $0=$1
조건으로 사용됨).
sed
위에서 언급한 골프 문제를 보완하는 올바른 솔루션 은 다음과 같습니다 .
$ sed -n '/\<Turtle\>/s/[[:blank:]].*//p' <file
259497
457032
해당 단어가 포함된 모든 줄을 찾은 Turtle
다음 인쇄하기 전에 해당 줄의 첫 번째 공백이나 탭과 그 뒤의 모든 항목을 제거합니다(다른 줄의 인쇄는 억제됨 -n
).
예를 들어 문자열만 일치 하고 일치하지 않도록 단어 \<
의 \>
시작 및 끝 경계를 일치시킵니다 .\<Turtle\>
Turtle
RedTurtle