すべてのテキストファイルの行だけを1回以上表示

すべてのテキストファイルの行だけを1回以上表示

a.txt

cat a.txt
a
b
x
c

b.txt

cat b.txt
d
e
a
f

キュー:

SOMEMAGICK *.txt
a

尋ねる:すべての* .txtファイルの行のみを表示する方法は?

ベストアンサー1

どうですか?

cat *.txt | sort | uniq -c | egrep "^ +$(ls -1 *.txt | wc -l) "

その後、発生回数を減らすために追加できます。

cat *.txt | sort | uniq -c | egrep "^ +$(ls -1 *.txt | wc -l) " | sed -re 's/^ +[0-9]+ //'

@Stephaneのコメントによると、単一のファイルに1行が複数回表示されると、上記の内容は機能しません。これを防ぐために、最初に各ファイルを並べ替えて一意化します。

for f in *.txt; do sort -u $f > $f.uniqd; done
cat *.uniqd | sort | uniq -c | egrep "^ +$(ls -1 *.uniqd | wc -l) " | sed -re 's/^ +[0-9]+ //'

今はもう行ではありませんが。 :)

おすすめ記事