特定の行数のファイルのみをリスト(または移動)しますか?

特定の行数のファイルのみをリスト(または移動)しますか?

複数の2行構成ファイルを使用して作業するときに、行数が異なるすべてのファイルを除外する方法が必要です。

したがって、次のようになります。

mv * destdir only if file contains exactly two lines

または:

wc -l * | grep '^ *2' | xargs mv {} destdir

しかし、これらのどれも実際に動作するコードではありません。

この記事を書いて、私は気づいた。するこれを行う方法がありますが、見苦しいので、以下の回答に含めました。

これを行う簡単でクリーンな方法はありますか?

ベストアンサー1

あなたの不器用な解決策初心者には悪くありません。awk行数を提供するだけでなく、それを表示することもできるという事実を見逃すだけです。出口以下を使用して接続できるように、正しいステータスコードを使用してくださいcp

for file in * ; do awk 'NR==3{exit}END{exit NR!=2}' "$file" && cp "$file" /tmp; done

NRレコード数、そして提供したように@don_crissti答えは、NR==33行目に遭遇すると、確認を使用して追加の処理を中止できることです。

NR!=2awkistrue/false値が面白いようですが、これが正しく機能するためには、1/0シェルで0成功状態を示す必要があります。&&その逆の場合も同様です(見たときの反応がどれほど強いかによって異なります!=)。

for file in * ; do awk 'NR==3{exit}END{exit NR==2}' "$file" || cp "$file" /tmp; done

おすすめ記事