2016-05-24 5 views
0

検索コンテンツの下にテキストが書かれている1 file.txtをがあるとしますユニークワード

ABC/xyz 
ABC/xyz/rst 
EFG/ghi 

私が最初/前に最初のユニーク単語を抽出することができ、シェルスクリプトを記述する必要があります。

出力として、ABCEFGを1つのファイルに書きたいとします。

答えて

0

これを試してみてください:

cat file.txt | tr -s "/" ' ' | awk -F " " '{print $1}' | sort | uniq > outfile.txt 
+0

あなたは説明できますか? –

+0

ちょっとquik、random&posibleな解決策の何百もの間で働いています:) –

2

あなたは-u(のための "ユニーク")オプションでsortに、その後cut(区切り文字としてスラッシュ)、パイプとの最初の単語を抽出することができます。

$ cut -d '/' -f 1 file.txt | sort -u 
ABC 
EFG 

出力をファイルにするには、コマンドに> filenameを追加してリダイレクトするだけです。 (またはパイプ出力を参照してファイルにそれを得るためにtee filenameに。)

0

あなたがカットのミックスを使用し、そのように並べ替えることができます。

cut -d '/' -f 1 file.txt | sort -u > newfile.txt 

最初の行がされるまでの任意の文字列をつかみますスラッシュ/を入力し、newfile.txtに出力します。 2行目はテキストをソートし、重複する文字列を削除します。

+0

あなたは確かに 'cut -d '/' -f 1 file.txt |並べ替え| uniq -u> newfile.txt' - OPは*ファイル*で彼の出力を望んでいるので。また、 'sort -u'は' uniq'への呼び出しを完全に削除することを可能にします。 –

+1

@NiallCosgroveはい、間違ったコマンドで一意の結果を追加しました。uniq -uコマンドは、文字列の最初の出現を含むすべての重複を削除することに気付きました。これは私の間違いです。 – TheGirrafish

0

もう一つの興味深いバリエーション:

awk -F'/' '{print $1 |" sort -u" }' file.txt > outfile.txt 

ない、それはここで問題が、パイプにできることとawkの中にリダイレクトすることは非常に便利なことができるという。

0

もう一つの簡単な方法:あなたがここに `tr`だけではなく、` awkの-F '/' を `使用する理由

cut -d"/" -f1 file.txt|uniq > out.txt 
+0

'cat'は不要ですが、ファイルの後半で以前の文字列を繰り返していても、文字列が違う場合は機能しません。例: 'ABC/xxx \ nEFG/yyy \ nABC/zzz' – user1934428

+0

@ user1934428-これは' cat'なしで済んでいた可能性があることに同意しましたが、コマンドの問題はどこにありますか。与えられた入力で必要な出力を生成します。しかし、私の答えを編集して猫を取り除き、より効率的にしました。 – syadav

+0

これは、質問をした人とは異なる「ユーザ」です; –

関連する問題