こんにちは。同様の問題に対して多くの解決策を試しましたが、そのどれも私には効果がないようです。各行の文字列 " length_ "の後に未定義の長さを持つテキストファイルがあります。 5000以上の数字の行をすべて選択するにはどうすればよいですか?これはこれまで試したコードの中で最もきれいな試みですが、まだ空のファイルのみを生成します(file1には確かに5000より大きい数を含む行が含まれていますが)。
grep --regexp="length_\"[5-9][0-9]\{3,\}\"" file1.txt > file2.txt
入力テキストファイルのサンプル情報:
/file/path/xx00:>TEXT_1_length_81903_cov_10.5145_
/file/path/xx01:>TEXT_2_length_348971_cov_13.6753_ /
file
/path/xx04_1_9 /path/xx03:>TEXT _4 _length_29811_cov_13. 7948
/ファイル/パス/xx03:>TEXT_5_length_2567_cov_13.7948_
必要なサンプル情報をテキストファイルに出力します。
/file/path/xx00:>TEXT_1_length_81903_cov_10.5145_
/file/path/xx01:>TEXT_2_length_348971_cov_13.6753_
/file/ path/xx03:>NODE_4_1_7
答え1
以下は、awkを使用してファイル内の文字列 "length_"の後に5000以下の数字を含む行を印刷する1つの方法です。
awk '{sub("length_", "", $0); if ($0 <= 5000) { print "length_"$0 } }' input
単にawk
"length_"文字列を削除し、行の残りの部分を5000と比較するように指示します。 5000以下の場合は、行の残りの部分と一緒に「length_」を印刷します。あなたのQタイトル行(当時)は「5000より大きい」と言ったので、これが実際に必要な場合は、awkで比較を変更してください。
awk '{sub("length_", "", $0); if ($0 > 5000) { print "length_"$0 } }' input
一方実際ファイル形式の場合、awkコマンドは大幅に簡略化できます。
awk -F_ '$4 > 5000' input
または
awk -F_ '$4 <= 5000' input
awk に下線に基づいてフィールドを分割し、4 番目のフィールドを 5000 と比較するように指示します。比較が true の場合 (デフォルトでは) 印刷されます。
答え2
grep -E '_length_([5-9][0-9]{3}|[0-9]{5,})_' file1.txt > file2.txt
出力ラインには以下が含まれます。
_length_
以下は次のとおりです。5
-そして9
別の3桁の数字(5000-9999)または- 5桁以上(10000+)
_
.