csvgrep(csvkit의 일부)을 사용하여 두 파일 중 하나와 일치하는 줄을 추출하려고 합니다. 불행하게도 grep처럼 두 개의 일치하는 파일을 허용하는 명령줄 옵션은 없습니다. 오직,
csvgrep -f list1.txt -c 2 myfile.csv
명령의 일부로 list1.txt를 list2.txt와 연결하는 방법이 있습니까?
csvgrep -f (list1.txt+list2.txt) -c 2 myfile.csv
제가 생각할 수 있는 유일한 방법은 임시 중간 파일을 사용하는 것인데 가능하다면 그렇게 하지 않는 편이 낫습니다.
답변1
읽을 때 두 파일의 내용을 모두 제공하는 "파일 이름"을 명령에서 확인한 다음 교체를 처리하고 cat
원하는 내용을 지정한다고 가정합니다.
csvgrep -f <(cat list1.txt list2.txt) -c 2 myfile.csv
기본적으로 프로세스 교체는 내부적으로 명령을 실행하고 해당 출력이 일반 파일처럼 열 수 있는 매직 파일을 통해 제공되도록 준비하는 일반 파이프입니다. 확장자 자체는 매직 파일의 이름으로 확장됩니다. (즉 , , print 와 echo <(echo foo)
같은 것을 인쇄합니다 .)/dev/fd/63
cat <(echo foo)
foo
답변2
많은 프로그램에서는 -
표준 입력 또는 출력을 나타내는 파일 이름으로 사용할 수 있습니다(입력 파일인지 출력 파일인지에 따라 다름). 따라서 파이핑 csvgrep
하고 사용해 볼 수 있습니다 -f -
.
cat list1.txt list2.txt | csvgrep -f - -c 2 myfile.csv
작동한다면 쉘별 확장에 의존하지 않기 때문에 프로세스 교체 방법에 비해 이점이 있습니다.
그래도 작동하지 않으면 를 사용할 수 있습니다 /dev/stdin
. 이는 프로세스의 표준 입력을 자동으로 참조하는 표준 Linux 장치입니다.
출력이 파이프를 통해 전송되므로 이러한 모든 솔루션은 파일 조회가 csvgrep
필요하지 않습니다 . 그러나 그것은 안전한 가정처럼 보입니다.-f
cat