여러 특정 패턴이 포함된 라인을 추출하고 출력을 별도의 출력 파일에 저장합니다.

여러 특정 패턴이 포함된 라인을 추출하고 출력을 별도의 출력 파일에 저장합니다.

파일이 많은 폴더가 있습니다 .vcf. 로 시작하는 모든 줄을 추출하여 #파일에 저장한 다음 열 12로 시작하는 모든 줄을 1/1동일한 파일에 추가해야 합니다. 각 입력 파일에 대해 새 출력 파일을 생성해야 합니다.

abc.vcf, def.vcf--> 필터 --> abcfiltered.vcf,deffiltered.vcf

나는 다음과 같이 생각했지만 작동하지 않습니다.

printf '%s\0' *.vcf | xargs -0 -n 1 sh -c 'grep "#" "$1" > "candilist${1#case*}"' sh

이것은 첫 번째 조건에서 작동합니다.

이 명령을 추가해 보았습니다.

awk -F '\t' '$12~/^1/' "$1");

혼자서는 일하지만, 함께라면 일하지 않습니다. 따옴표나 괄호가 있는 것 같아요.

답변1

awk -F'\t' '
    /^#/          { print >"file1" }
    ($12 ~/^1\/1/){ print >"file2" }' ./*.vcf

그러면 .vcf 파일에 해당 문자로 시작하는 모든 줄이 저장됩니다.#입력하다파일 1열 # 12로 시작하는 줄1/1(awk 정규식의 슬래시는 특수 문자이므로 백슬래시로 이스케이프 처리합니다.)파일 2.

위의 코드에서 참고하세요파일 2제외하려는 경우 두 가지 행 유형( #column#12 로 시작하고 또한column#12로 시작)을 포함합니다 .1/1파일 2다음 줄부터 시작하여 첫 번째 블록에 #문을 추가합니다 .next/^#/{ print >"file1"; next }

또한 우선순위는 시작 행부터 #먼저 확인되므로 행의 두 조건이 모두 충족되면 첫 번째 조건만 고려되며, 두 번째 우선순위로 확인해야 할 경우 블록 순서를 변경하시기 바랍니다.


수정된 질문에 대한 답변(각 .vcf 파일을 처리하고 별도로 출력 생성):

for file in ./*.vcf; do
    awk -F'\t' '
        /^#/          { print >(FILENAME"_1.procced") }
        ($12 ~/^1\/1/){ print >(FILENAME"_2.procced") }' "$file"
done

관련 정보