
私の主な目的は、ディレクトリの内容をコピーしてファイルに送信することです。次に、名前のみを含めるようにディレクトリの場所を切り取ります。その後、コンテンツをクリーンアップすると、ほとんどが表示されます。これも課題です。私の制限は命令でなければならないということです。
これは可能だと思いましたが、できませんでした。
wc -l ~location/folder/folder/*.log > ~/log.info | cut -d "/" -f9 ~/log.info | sort
私の結果
1 /s/s/s/s/location/folder/folder/a.log 1 /s/s/s/s/location/folder/folder/b.log 1 /s/s/s/s/location/folder/folder/c.log 3 /s/s/s/s/location/folder/folder/d.log 2 /s/s/s/s/location/folder/folder/e.log
欲しいもの
1 a 1 b 1 c 2 e 3 d
答え1
不要なビットをすべて削除するために出力をパイプすることができますsed
。
wc -l ~location/folder/folder/*.log > ~/log.info
cut -d "/" -f9 ~/log.info | sort | sed 's_/.*/__;s_\.log$__'
答え2
どうですか?
perl -e 'print sort map {s/(\d).*(\w)\..*//r} <>'
(Perl 5.14+が必要 - システムにすでにインストールされている可能性があります)
インラインPerlコードを使用してください。
<>
STDINまたはコマンドラインで指定されたファイルを読み込みます。(\d)
代替正規表現を使用して、前の数字と文字をキャプチャします。.
(\w)\.
- その後、変換された文字列を返します。
r
正規表現フラグ。 map
繰り返しのためSTDIN
。- そして
sort
…まあ、まとめました。 - そして
print
印刷してください。
出力:
1 a
1 b
1 c
2 e
3 d
または:
perl -e '%x=map {open($f,'<',$_); @f=<$f>; $_=>''.@f} @ARGV;print "$x{$_} $_\n" for sort {$x{$a}<=>$x{$b}} keys %x;' ~location/folder/folder/*.log
答え3
wc … > ~/log.info | cut ~/log.info | …
パイプの両側が平行に実行されます。wc
非常に迅速に完了し、cut
非常にゆっくりと開始されない限り、cut
読んだときに~/log.info
まだ空であるか、または存在しない可能性が高くなります。問題をより複雑にするために、リダイレクトsort
も並行して実行され、ファイルも切り捨てられます。
この中間一時ファイルで何をしたいのか理解できません。動作しませんでした。
wc -l ~location/folder/folder/*.log | cut -d "/" -f9 | sort > ~/log.info
宛先ディレクトリに切り替える方が簡単です。
{ cd ~location/folder/folder && wc -l -- *.log; } | sort > ~/log.info