同じ形式のファイルがたくさんあります。
line 1: Gene ID
line 2: chromosomal position
line 3 - x: names of genetic variants)
少なくとも5つのバリエーションを含むファイル(つまり、合計行が少なくとも10行以上のファイル)のみを選択したいと思います。ファイルに5つ以上のバリエーションがある場合は、最初の2行以外の内容を新しいファイルに書きたいと思います。以下に、2つのサンプル入力ファイル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行以上の行がある場合は3番目のファイルからすべての行を印刷します。
答え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