私のファイルは次のとおりです...
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