줄 수를 기준으로 파일을 선택하고 결과를 조작합니다.

줄 수를 기준으로 파일을 선택하고 결과를 조작합니다.

동일한 형식의 파일이 많이 있습니다.

line 1: Gene ID
line 2: chromosomal position
line 3 - x: names of genetic variants)

최소한 5개의 변형이 포함된 파일(즉, 총 줄이 최소 10줄 이상인 파일)만 선택하고 싶습니다. 파일에 변형이 5개 이상 있으면 처음 두 줄을 제외한 내용을 새 파일에 쓰고 싶습니다. 아래에는 두 가지 예제 입력 파일 foo1도 제공되어 있습니다 foo2.

foo1:

echo {885743,4:139381:3783883,rs93487,rs82727,rs111} | tr " " "\n" > foo1

부자 2:

echo {10432,1:3747548:2192993,rs10204,rs262222,rs436363,rs3636,rs9878,rs11856} | tr " " "\n" > foo2

필요한 출력 파일(이 경우에는 파일이 1개만 있고 실제로는 여러 개의 별도 출력 파일이 있습니다): foo2.checked아래와 같이:

rs10204
rs262222
rs436363
rs3636
rs9878
rs11856

답변1

이름에 흥미로운 문자가 포함된 파일이 없다고 가정

 for file in *
 do
    line=$(wc -l < "$file' )
    if [ $line -ge 10 ]
    then
       tail -n +3 <"$file" > "${file}.checked"
    fi
 done

이는 기본적으로 각 파일의 줄 수를 계산하고, 줄이 10개 이상이면 세 번째 파일부터 모든 줄을 인쇄합니다.

답변2

 # for each file in the current directory you can refine the ls command to match 
 # only the files you want. or if in a script file pass in the file list 
 for file in *
 do
    # if the file has more than 10 lines.
    if (( $(<"${file}" wc -l) > 10 )); then
       # print line 3 to end of file and pipe it to a file with the same
       # name as the input file with the added .checked at the end.
       sed -n '3,$p' -- "${file}" > "${file}.checked"
    fi
 done

관련 정보