Как получить сценарий оболочки для удаления дубликатов в текстовом файле на основе 11-го 21-го столбца?

Я провел много исследований по этому вопросу. Вы можете сделать тест на файле с подсчетом слов, но он не даст вам того же числа, что и du -sb adir.

tar -tvOf afile.tar | wc -c

du считает каждый каталог как 4096 байт, а tar считает каталоги как 0 байт. Вы должны добавить 4096 к каждому каталогу:

$(( $(tar -tvOf afile.tar 2>&1 | grep '^d' | wc -l) * 4096)))

затем вы должны добавить все символы. Для чего-то, что выглядит так:

$(( $(tar -tvOf afile.tar 2>&1 | grep '^d' | wc -l) * 4096 + $(tar -xOf afile.tar | wc -c) ))

Я не уверен, что это идеально, поскольку я не пробовал файлы, которые были тронуты (файлы с 0 байтами) или файлы с 1 символом. Это должно приблизить вас к идеалу.

0
19.03.2019, 09:56
2 ответа

Исходя из ожидаемого результата, может быть что-то вроде:

awk 'NF <= 1 || !seen[substr($0, 11, 11)]++'

Или

awk 'NF <= 1 || !seen[substr($2, 1, 11)]++'

Или сохранить последнюю запись:

awk '!second_pass {if (NF > 1) count[substr($2, 1, 11)]++; next}
     NF <= 1 || --count[substr($2, 1, 11)] == 0' file second_pass=1 file
0
28.01.2020, 05:05

команда:header=sed -n '1p' l.txt ; footer=sed -n '$p' l.txt;sed -e '1d' -e '$d' l.txt |awk '{if (!seen[$2]++)print $0}'| sed '1i '$header''| sed '$s/.*/&\n'$footer'/g'

выход

header=`sed -n '1p' l.txt`; footer=`sed -n '$p' l.txt`;sed -e '1d' -e '$d' l.txt |awk '{if (!seen[$2]++)print $0}'| sed '1i '$header''| sed '$s/.*/&\n'$footer'/g'

Header:0000000000000001457854500000
XP        12345678912yeyeyeyeeye   0000003
XP        12345678913yeyeyeyeeye   0000002
Footer:0000000000000001245856500004
-1
28.01.2020, 05:05

Теги

Похожие вопросы