.txtファイルのデータセットから重複行を削除するにはどうすればよいですか?問題は、私の行の半分が重複していて、最初のRESULT行だけが必要であることです。コマンドを試しましたが、正常に動作しませんでした。
sort myfile.txt uniq -u | newfile.txt
これは私のファイルの内容です。私のファイルの行数は299873です。
ligand_06278/out.pdbqt:REMARK Name = 22626427
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.3 2.094 2.612
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.3 2.821 8.000
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.4 3.333 6.628
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.4 4.526 7.557
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.5 2.500 4.835
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.5 2.516 7.135
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.6 2.660 7.148
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.8 3.141 6.023
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.9 0.000 0.000
ligand_06279/out.pdbqt:REMARK Name = 22629712
ligand_06279/out.pdbqt:REMARK VINA RESULT: -6.1 9.841 13.115
ligand_06279/out.pdbqt:REMARK VINA RESULT: -6.3 15.483 18.543
ligand_06279/out.pdbqt:REMARK VINA RESULT: -6.3 1.944 5.962
ligand_06279/out.pdbqt:REMARK VINA RESULT: -6.3 8.946 12.260
ligand_06279/out.pdbqt:REMARK VINA RESULT: -6.5 14.453 17.240
ligand_06279/out.pdbqt:REMARK VINA RESULT: -6.8 10.330 14.145
ligand_06279/out.pdbqt:REMARK VINA RESULT: -6.8 1.727 5.848
ligand_06279/out.pdbqt:REMARK VINA RESULT: -7.1 7.429 11.509
ligand_06279/out.pdbqt:REMARK VINA RESULT: -7.3 0.000 0.000
ligand_06280/out.pdbqt:REMARK Name = 22631372
ligand_06280/out.pdbqt:REMARK VINA RESULT: -10.0 3.811 7.264
ligand_06280/out.pdbqt:REMARK VINA RESULT: -10.1 0.000 0.000
ligand_06280/out.pdbqt:REMARK VINA RESULT: -9.3 5.006 9.020
ligand_06280/out.pdbqt:REMARK VINA RESULT: -9.4 2.195 8.687
ligand_06280/out.pdbqt:REMARK VINA RESULT: -9.4 2.712 9.301
ligand_06280/out.pdbqt:REMARK VINA RESULT: -9.6 2.186 8.354
ligand_06280/out.pdbqt:REMARK VINA RESULT: -9.7 5.168 7.981
ligand_06280/out.pdbqt:REMARK VINA RESULT: -9.8 1.961 2.580
ligand_06280/out.pdbqt:REMARK VINA RESULT: -9.8 2.311 8.341
答え1
$ awk -F: '$1 != p && /RESULT/ { print; p = $1 }' file
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.3 2.094 2.612
ligand_06279/out.pdbqt:REMARK VINA RESULT: -6.1 9.841 13.115
ligand_06280/out.pdbqt:REMARK VINA RESULT: -10.0 3.811 7.264
RESULT
これにより、入力ファイルに記載されている各ファイルの最初の行が出力されます。最初の列(ファイル名)を前の行の最初の列と比較し、現在の行に単語が含まれているかどうかをテストしてこれを行いますRESULT
。前の行とファイル名が異なる行が見つかると、その行は更新された値RESULT
でそのまま印刷されます。p
入力ファイルがgrep
複数のファイルを実行した結果(おそらくgrep search)と非常によく似ていることがわかりましたREMARK
。
すべてのファイルを検索し、各ファイルに一致する最初の行を取得するには、次の手順を実行しますREMARK VINA RESULT
。
find . -type f -path './ligand_*' -name 'out.pdbqt' -exec sed -n '/REMARK VINA RESULT/{p;q;}' {} ';'
または簡単なループで:
for name in ligand_*/out.pdbqt; do
grep -F 'REMARK VINA RESULT' "$name" | head -n 1
done
ここではさまざまな方法を使用しましたが、最も自然に感じる方法を選択してください。
答え2
次の行()をgrep
含めて出力を渡すことで、これらの行を削除できます。Name=
-A1
grep RESULT
Name=
$ grep -A1 'Name =' file | grep RESULT
ligand_06278/out.pdbqt:REMARK VINA RESULT: -8.3 2.094 2.612
ligand_06279/out.pdbqt:REMARK VINA RESULT: -6.1 9.841 13.115
ligand_06280/out.pdbqt:REMARK VINA RESULT: -10.0 3.811 7.264