複数の重複項目を含むテキストファイルを編集しようとしています。目的は、文字列の最初の項目だけを保持し、同じ文字列の残りの重複行を削除することです。
サンプルファイルから
* Title 1
** Subtitle 01
#+begin_src
Line 001
Line 002
#+end_src
* Title 1
** Subtitle 02
#+begin_src
Line 001
Line 002
#+end_src
* Title 2
** Subtitle 01
#+begin_src
Line 001
Line 002
#+end_src
* Title 2
** Subtitle 02
#+begin_src
Line 001
Line 002
#+end_src
* Title N
一つずつ所蔵したいのに無関係または指定されていない他のすべての重複行を保持します。ファイルに。結果は次のとおりです。
* Title 1
** Subtitle 01
#+begin_src
Line 001
Line 002
#+end_src
** Subtitle 02
#+begin_src
Line 001
Line 002
#+end_src
* Title 2
** Subtitle 01
#+begin_src
Line 001
Line 002
#+end_src
** Subtitle 02
#+begin_src
Line 001
Line 002
#+end_src
重複を排除する既存のソリューションは次のとおりです。
uniq file.txt
awk '!a[$0]++' contents.txt
shell - Unixでファイルをソートせずにファイルから重複行を削除する方法
perl -ne 'print if ! $x{$_}++' file
すべての重複エントリを無差別に削除します。
私はこれらのソリューションのバリエーションとGNUのsed
ループ形式を試しました。
duplicateLines=$(grep -E "^\* .*" file.org | uniq)
printf '%s\n' "$duplicateLines" | while read -r line; do
sed "s/$line//g2" file.org
done
成功しませんでした。私は純粋なパフォーマンスには気にしませんので、何度も繰り返すこと(たとえば、sed
指定された文字列を一度に1つずつ削除するためにループ内で呼び出す)は問題ありません。
どんな洞察力でも大変感謝いたします。
シェルスクリプトでこれを行うことができればと思いますが、Python、C、Javaなどの他のソリューションでも開いています。関数/ライブラリ名が何であるかを教えてください。そこで検索します。 。
ありがとうございます。
ベストアンサー1
!a[$0]++
増分モードが次のように変わるように、awkパラダイムを簡単に変更できます。
awk '!a[$0]; /^\* Title/{a[$0]++}' file