次の質問によると、重複した行をどのように印刷できますか? [閉鎖]

次の質問によると、重複した行をどのように印刷できますか? [閉鎖]

ls私が経験している問題は次のとおりです。 Q1のstdoutをfoobarファイルにリダイレクトする方法を知っています。ls > foobar

  1. コマンドのstdoutをファイルlsにリダイレクトし、stdoutをコマンドのstdinに関連付けるコマンドラインを作成します。対応するファイル記述子を使用しないで、提供された指示の順序でコマンドを完了してください。foobarwc

  2. シェルで重複した行のみを表示するコマンドラインを作成します。

どんな助けでも大変感謝します! !

答え1

これそうだケースプライマーと同様におそらく予想される知る一部のユーティリティは一般的なシェルヘルパーです(例:wc私が参照したユーティリティ)。

もしそうなら、質問#2はシェルユーティリティの機能を覚えているかどうかを尋ねることですuniq。なぜなら、答えは次のようになります。「uniq -dによるパイプ出力」

$ echo -e "one\ntwo\ntwo\nthree" # Echo four lines, one is repeated
one
two
two
three
$ echo -e "one\ntwo\ntwo\nthree" | uniq -d    # Filter the four
two

修正する: 冗長ライン出力でも誤動作、重複した行が隣接して識別できるように、行を並べ替えるだけですuniq -d。 「... | sort | uniq -d」をsort使用する前にuniqこれを行うことができます。

「Aの標準出力をBの標準入力に接続する」は、パイプ文字(既に知っている>文字に似ています)を介して行われますA | B。これはecho標準出力があるとき上で起こるものです。管路標準入力としてuniq -d

これらすべてがあなたを示しています。できなければならないこの質問に自分で答えてください。実際にパイプ記号の使用を見逃した場合は、この質問の前の手順、メモ、チュートリアル、またはその他の内容を再検討する必要があると言ってはいけません。あなたが何を見逃すのか誰が知っていますか?- 実際、これがこの愚かな質問の目的です。基礎を強化しなければならない時を悟るようにするためです。

答え2

2/各行を前の行と同じように印刷する小さなシェルスクリプト:

( read a ; while read b ; do if [[ "$a" = "$b" ]] ; then echo "$a" ; fi ; a="$b";done ; )

この行を入力してから、次のように入力できます。< a_file

ほとんどの(すべて?)イディオムはbashマニュアル(man bash)から来ます。

関連情報