파일의 특정 내용을 가져옵니다


9

따라서이 문제에 대한 도구를 들었 기 때문에이 문제에 대한 도구가 있다는 것을 알고 있지만 도구가 무엇인지 모르겠습니다.

/ etc / passwd의 사용자 이름을 제외한 모든 데이터를 필터링하는 것과 같은 일을하고 싶습니다.

예를 들어 다음 파일에서 user1, user2 및 user3을 가져오고 싶습니다. 이 경우 논리는 "파일의 각 줄에서 첫 번째 ':'까지 텍스트를 붙입니다"가 될 수 있습니다.

user1:x:1:4
user2:x:2:5
user3:x:3:6

결과는 다음과 같습니다.

user1
user2
user3

답변:


19

cut이 목적을 위해 존재합니다. -d플래그는 구분 기호를 지정하고, -f출력 필드 지정 :

cut -d: -f1 /etc/passwd

에 대한 주장 은 첫 번째와 세 번째 필드 를 보여 주거나 첫 세 필드를 보여주는 -f것과 같습니다 . 도 있습니다 와 바이트 문자 대신 필드를 읽어 플래그. 좀 더 유연한 무언가 가 필요하면 일반적으로 트릭을 수행 할 것입니다 ( Matthew 's answer 참조 )1,31-3-b-cawk


13

테이블 형식의 입력에서 데이터를 추출 할 때마다 awk 를 고려해야 합니다. 거의 모든 유닉스 시스템에서 사용할 수 있으므로 다음과 같은 습관을들이는 것이 좋습니다.

awk -F':' '{print $1}' /etc/passwd 
  • -F':': ":"을 열 분리 문자로 정의합니다.
  • '{}': 각 라인에 대해이 명령을 실행하십시오.
  • print $1: 첫 번째 열을 화면에 인쇄합니다.

3
랜덤 노트 : awk파일 이름을 사용하므로 파이프를 건너 뛸 수 있습니다.awk -F: '{print $1}' /etc/passwd
Michael Mrozek

나는 항상 awk가 파일 이름을 사용한다는 것을 잊어 버린 것 같습니다. 나는 항상 파이프 라인에서 사용하는 것 같습니다 ... sed와 같은 것 | awk etc ...
Matthew Brannigan

파일과 함께 작동하는 거의 모든 것은 파일 이름을 사용합니다 ( tr그리고 at그렇지 않은 몇 가지 예입니다).
추후 공지가있을 때까지 일시 중지되었습니다.

3

Perl 원 라이너는 다음과 같습니다.

perl -F/:/ -lane 'print $F[0]' /etc/passwd

1

perl과 awk 아래에 그러한 작업을위한 세 번째 도구가 있습니다.

sed 's/:.*//' FILE 

이것은 다음의 대체 명령입니다. colon from replacement : 뒤에 점이 있습니다.이 점은 모든 종류의 개수 (*)의 문자가없는 조커입니다.

TO가 비어있는 's (ustitute) / FROM / TO /'는 'sed는 기본적으로 욕심이 많기 때문에'콜론 (sed는 전체 줄과 잘 작동하므로 줄 끝까지)을 의미합니다.

물론 cut훌륭한 명령이기도하지만 다른 가정에서 말할 것입니다.


1

귀하의 예에서, 3 개의 이름은 모두 같은 길이입니다. 이러한 경우에 / etc / passwd에서는 발생하지 않지만 colrm을 사용할 수도 있습니다.

echo "user1:x:1:4
> user2:x:2:5
> user3:x:3:6" | colrm 6
user1
user2
user3

또는 물론

cat FILE | colrm 6 

( useless use of cat응용 프로그램이 매개 변수로 작동하도록 colcol을 전달할 수 없기 때문에 적용되지 않는 드문 경우 입니다.)


cat여전히 쓸모가 없습니다 : colrm 6 < FILE.
manatwork

음, 그렇습니다. 그러나 전화하는 것처럼 쓸모가 없습니다 cat foo | grep bar.
사용자 알 수 없음

1

완전성을 위해 외부 명령이 필요하지 않으며 쉘 (Bourne 쉘 또는 호환 가능)이 단독으로 처리 할 수 ​​있습니다.

while IFS=':' read -r needed garbage; do echo "$needed"; done < input_file

물론 이것은 가능한 모든 솔루션 중 가장 느리므로 큰 파일의 경우 다른 파일을 선택하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.