별도의 텍스트 파일에 나열된 tsv 테이블에서 패턴을 추출하고 해당 행에 처음 5개 셀을 추가합니다.

별도의 텍스트 파일에 나열된 tsv 테이블에서 패턴을 추출하고 해당 행에 처음 5개 셀을 추가합니다.

목록을 사용하여 큰 TSV 테이블에서 일부 특정 항목을 추출하려고 합니다. 또한 처음 5개 열에 해당 데이터가 필요합니다.

목록파일.txt

항목 123
항목 532
항목 685
항목 555

...등...

테이블.tsv

열 1 2열 3열 4열 5열 6열 7열 8열 9열 열 10 등...
값 1 값 2 값 3 값 4 값 5 항목 787 값 7 값 7 값 7 값 7 등...
값 1 값 2 값 3 값 4 값 5 값 6 항목 532 값 7 값 7 값 7 등...
값 1 값 2 값 3 값 4 값 5 값 6 항목 685 값 7 값 7 값 7 등...
값 1 값 2 값 3 값 4 값 5 항목 999 값 7 값 7 값 7 값 7 등...
값 1 값 2 값 3 값 4 값 5 값 6 값 7 항목 123 값 7 값 7 등...
값 1 값 2 값 3 값 4 값 5 값 6 값 7 값 7 값 7 항목 555 등...
등... 등... 등... 등... 등... 등... 등... 등... 등... 등... 등...

산출

열 1 2열 3열 4열 5열 6열
항목 123 값 1 값 2 값 3 값 4 값 5
항목 532 값 1 값 2 값 3 값 4 값 5
항목 685 값 1 값 2 값 3 값 4 값 5
항목 555 값 1 값 2 값 3 값 4 값 5

이 조합을 시도했지만 작동하지 않습니다.

grep -o -F -f listfile.txt table.tsv | awk '{print $1"\t"$2"\t"$3"\t"$4"\t"$5}' > output

내가 뭘 잘못했나요? 감사합니다.

답변1

탭으로 구분된 파일이 다음과 같고 필드에 공백이 없다고 가정해 보겠습니다.

$ cat file
col1    col2    col3    col4    col5    col6    col7    col8    col9    col10   etc...
val1    val2    val3    val4    val5    entry123    val7    val7    val7    val7    etc...
val1    val2    val3    val4    val5    val6    entry532    val7    val7    val7    etc...
val1    val2    val3    val4    val5    val6    entry685    val7    val7    val7    etc...
val1    val2    val3    val4    val5    entry999    val7    val7    val7    val7    etc...
val1    val2    val3    val4    val5    val6    val7    val7    val7    entry555    etc...

다음과 같은 목록 파일이 있습니다.

$ cat listfile 
entry123
entry532
entry685
entry555

grep다음의 조합을 사용하여 원하는 것을 수행할 수 있습니다 cut.

$ grep -wf listfile -e 'col1' file | cut -f1-6
col1    col2    col3    col4    col5    col6
val1    val2    val3    val4    val5    entry123
val1    val2    val3    val4    val5    val6
val1    val2    val3    val4    val5    val6
val1    val2    val3    val4    val5    val6

먼저, grep -wf listfile -e 'col1' file다음 단어 중 하나를 포함하는 모든 줄이 인쇄됩니다.listfile 별도의 단어로이므로 필드에 공백이 없으면 별도의 필드로 간주됩니다. 또한 col1별도의 단어로 일치하는 유일한 줄이므로 제목도 인쇄합니다 .실제 데이터에는 다른 단어를 사용해야 하며, 제목에만 있는 것을 선택하세요..

cut -f1-6그런 다음 처음 6개 필드만 유지하는 필드 에 전달합니다 .

관련 정보