5000を超える数値を含むテキストファイルのすべての行をコピーします。

5000を超える数値を含むテキストファイルのすべての行をコピーします。

こんにちは。同様の問題に対して多くの解決策を試しましたが、そのどれも私には効果がないようです。各行の文字列 " 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 の場合 (デフォルトでは) 印刷されます。

おすすめ記事