各行の最初の12文字の重複を探す[重複]

各行の最初の12文字の重複を探す[重複]

私のファイルは次のとおりです...

abc100200300 abmen
abc100200300 arcxi
xyz200300300 aelmi

重複した行(最初の12文字のみを確認)を別々のファイルとして印刷するにはどうすればよいですか?

だから別のファイルにする必要があります

abc100200300 abmen
abc100200300 arcxi

答え1

標準オプションかGNU拡張かはわかりませんが、フラグがuniqある場合-w

   -w, --check-chars=N
          compare no more than N characters in lines

だから

sort file | uniq -D -w12
abc100200300 abmen
abc100200300 arcxi

または新しいファイルにリダイレクト

sort file | uniq -D -w12 > newfile

答え2

一方通行:

cut -c -12 file | uniq -d | grep -f - file

最初の12文字を抽出し、繰り返される文字を取得し、繰り返しパターンに一致する行を取得します。

答え3

GNUの二重配信方法は、awk入力ファイルの順序を維持します。

gawk -v FIELDWIDTHS=12 '
  ARGIND == 1 {c[$1]++; next}
  FNR == 1 {for (i in c) if (c[i] < 2) delete c[i]}
  $1 in c' inputFile inputFile

POSIXに対応:

awk '
  {key = substr($0, 1, 12)}
  !first_pass_done {c[key]++; next}
  FNR == 1 {for (i in c) if (c[i] < 2) delete c[i]}
  key in c' inputFile first_pass_done=1 inputFile

答え4

以下のawkとsedコマンドを使用して行いました。

入力ファイル

abc100200300 abmen
abc100200300 arcxi
xyz200300300 aelmi

スクリプト

#!/bin/bash
for i in `awk '{print substr($1,1,12)}' Inputfile | sort | uniq`
do
j=`sed -n "/$i/p" Inputfile| wc -l`
if [[ $j > 1 ]]
then
sed -n "/$i/p" Inputfile>> /var/tmp/new_file_duplicate.txt
fi
done

New_file_duplicate.txt には次の内容が含まれています。

abc100200300 abmen
abc100200300 arcxi

関連情報