このようなコマンドがあります。
rga --files-with-matches --count-matches --sort path -i -e "use cases?" -e "user stor(y|ies)" -e "Technical debt" -e "Code Quality" -e "software development" -e "Agile Manifesto"
出力は次のとおりです
a1.pdf:18
a2.pdf:10
a3.pdf:14
....
ここに:NUM
一致回数があります。
10個以上の一致があるすべてのファイルが必要です(出力を別のコマンドにパイプできるようにコロンと数字はありません)。良い:
a1.pdf
a3.pdf
....
試してみましたが、.. | cut -d':' -f2
数字のみが提供されます。.. | cut -d':' -f1
ファイル名のみが提供されます。
ここで解決策は何ですか?
答え1
これは、ファイル名に文字が含まれている場合にも機能します:
。 2つのキャプチャグループを使用します。最初の:
グループは行の最後の文字(ファイル名)まで(含まず)すべてをキャプチャし、2番目のグループは最後の文字(数)の後のすべての数字をキャプチャします:
。このパターンと一致しない入力行は無視されます。
$ rga ... | perl -n -E 'm/^(.*):(\d+)$/; say $1 if $2 > 10'
a1.pdf
a3.pdf
改行文字を含むファイル名には機能しません。必要に応じてrga
NULで区切られた出力を生成できる場合(たとえば、または同様のオプションを使用-0
)、-z
これをPerlのオプションと一緒に使用して、-0
NULで区切られた入力を読み取ることができます。
答え2
そしてawk
:
... | awk -F: '$NF>10{ sub(/:[0-9]+$/, ""); print }'
レコードを分割し:
、最後のフィールドが10より大きいかどうかをテストします。条件が true の場合、:
レコードの末尾から少なくとも 1 つの数字を削除します。 (変更された)履歴を印刷します。