파일이 많은 폴더가 있습니다 .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