文字列と説明を含むタブ区切りの.csvがあります。このような:
strap tight
elba Island
foo bar
able Cain
parts buy
able Cain
まず、タブの前のすべての項目の長さに基づいてファイルをソートします。
parts buy
strap tight
able Cain
able Cain
elba Island
few many
その後、まったく同じ重複項目を削除します。
parts buy
strap tight
able Cain
elba Island
few many
それでも削除する必要があります。単語パズル重複—部分そして巻き同じ文字を持っています。あまりにもエルバそして有能な。
parts buy
able Cain
few many
ダイアログボックスの警告をエコーします。次のようになります。
これを行う最善の方法のアイデアはありますか?
編集する:
以下にいくつかの答えがあります:
- これはMac OS用です。
- 私は1ドルの試合に興味があります。
- $1には大文字がありません(ただし$2には大文字があります)。
- $ 1に重複した文字はありません。
これは私が今使っているコードです:
# print length+iii before every line
awk '{printf "%diii%s\n", length($1), $0}' < file.txt > /tmp/out && mv /tmp/out file.txt
# remove exact duplicates
sort -u < file.txt > /tmp/out && mv /tmp/out file.txt
# remove non-identical duplicates
# awk '{magic}' < file.txt > /tmp/out && mv /tmp/out file.txt
# varDupeEcho=remainder from above
# sort by size
sort -n -r -k1,1 < file.txt > /tmp/out && mv /tmp/out file.txt
#remove lengths
sed -i "" -E -e 's/^[0-9]+iii//' file.txt
# warn about duplicates
osascript -e "display dialog \"Duplicates found!\n\n$varDupeEcho\" --> Result: \{button returned:\"OK\"\}"
答え1
任意の順序で値を比較する一般的な方法は、部分をソートして比較用のキーを作成することです。たとえば、 "sorted_in"にGNU awkを使用して文字列を文字に分割するには、nullの3番目の引数を使用します。
$ cat tst.awk
BEGIN {
PROCINFO["sorted_in"] = "@val_str_asc"
OFS = "\t"
}
{
key = ""
split($1,chars,"")
for (i in chars) {
key = key tolower(chars[i])
}
print key, $0
}
$ awk -f tst.awk file | sort -k1,1 -u | cut -f2-
elba Island
strap tight
foo bar
明確な画像を得るために、一度に1つずつ実行されている作業を確認できます。
$ awk -f tst.awk file
aprst strap tight
abel elba Island
foo foo bar
abel able Cain
aprst parts buy
abel able Cain
$ awk -f tst.awk file | sort -k1,1
abel able Cain
abel able Cain
abel elba Island
aprst parts buy
aprst strap tight
foo foo bar
$ awk -f tst.awk file | sort -k1,1 -u
abel elba Island
aprst strap tight
foo foo bar
あなたの質問に、あなたがMacOSを使用していることを示す説明を追加したことを確認しました。さて、そこにGNU awkをインストールしてください。別のawkを使用して上記の操作を実行できますが、各入力行の主要文字に対してUnixソートを呼び出すためにシェルを作成する必要があります。これは値が非常に遅く、書き込みが少し面倒です。ソートアルゴリズムを直接実装する必要があり、作成するのが難しく、gawkをすばやく簡単にインストールでき、この問題と将来の問題を解決できる場合は、すべてが価値がありません。