複数の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==3
3行目に遭遇すると、確認を使用して追加の処理を中止できることです。
NR!=2
awk
istrue/false
値が面白いようですが、これが正しく機能するためには、1/0
シェルで0
成功状態を示す必要があります。&&
その逆の場合も同様です(見たときの反応がどれほど強いかによって異なります!=
)。
for file in * ; do awk 'NR==3{exit}END{exit NR==2}' "$file" || cp "$file" /tmp; done