パターンを含むファイルを一定回数移動します。

パターンを含むファイルを一定回数移動します。

(拡張子を含む)ファイルがたくさんあります.fna。文字が含まれている場合は移動する必要があります。>特定の回数。

どのファイルが含まれているかを知っています。>このコマンドを特定の回数だけ使用してください(この例では9回)。

grep -c ">" *.fna | grep ":9"

これは次のような出力を提供します

5242_ref.fna:9
9418_ref.fna:9

しかし、このファイルを別のフォルダに移動する方法がわかりません。

ありがとうございます。

ベストアンサー1

(正の一致がファイル名のみを返すようにegrepオプションで呼び出す)-lxargsテキストマッチングに基づいて任意のコマンドを実行できます。

[gnubeard@mothership: ~/mver]$ ls
destination  example.fna  non_example.fna
[gnubeard@mothership: ~/mver]$ cat example.fna
>>>>>>>>>
[gnubeard@mothership: ~/mver]$ cat non_example.fna
<<<<<<<<<
>>
[gnubeard@mothership: ~/mver]$ egrep -l '>{9}' *.fna | xargs -I{} mv {} destination/
[gnubeard@mothership: ~/mver]$ ls
destination  non_example.fna
[gnubeard@mothership: ~/mver]$ ls destination/
example.fna

編集:ファイルが別の文字または改行文字で区切られている場合、特定の数の文字インスタンスを持つファイルと一致しません。必要に応じて実行する必要がある短いスクリプトを作成しました。

#! /usr/bin/env bash

DESTINATION=./destination
MATCH_CHAR='>'
MATCH_COUNT=9

for FILE in $1; do
  MATCHES=$(grep -o $MATCH_CHAR $FILE | wc -l)
  if [ $MATCHES -eq $MATCH_COUNT ]; then
    mv $FILE $DESTINATION
  fi
done

例:

[gnubeard@mothership: ~/mver]$ ls
destination  example.fna  mver  non_example.fna
[gnubeard@mothership: ~/mver]$ cat example.fna
>>
>>foo>>bar>>>baz
[gnubeard@mothership: ~/mver]$ cat non_example.fna
<<<<<<<<<
>>
[gnubeard@mothership: ~/mver]$ ./mver *.fna
[gnubeard@mothership: ~/mver]$ ls destination/
example.fna
[gnubeard@mothership: ~/mver]$ ls
destination  mver  non_example.fna

おすすめ記事