3

Я хочу сравнить два файла размером около 40 МБ значений, разделенных запятыми, с такими строками:

hstar, по умолчанию, "T9883Z", 0d59, c801,7332,5,20120914,4.343618767

Для двух файлов последняя запись, которая в приведенном выше примере - 4.343618767 варьируется между двумя файлами, но почти все остальные поля совпадают.

Мне нужно различить два файла, чтобы найти несколько мест, где записи, отличные от последнего, различаются между двумя файлами.

Я думаю, что самый простой способ сделать это - использовать SED для обработки двух файлов и нормализовать последнее поле, отыскивая числовой шаблон после седьмой запятой и заменяя его фиксированной строкой, например, 9.999999999 в каждой строке, а затем простой Дифф будет работать.

Однако я не уверен, как создать команду sed, чтобы найти седьмую запятую и заменить оставшуюся строку до конца строки фиксированной строкой. Как будет выглядеть такая команда sed? Я предполагаю, что мне нужно было бы использовать регулярное выражение, но я не уверен, как запустить шаблон после седьмой запятой.

3 ответа3

7

Вам не нужно искать седьмую колонку. Просто перейдите к последнему:

sed 's/,[^,]*$/,9.9999999999/'

Объяснение:

,    match the comma
[    beginning of a character group
 ^   negation, i.e. do not match the following characters
 ,   comma
]    end of a character group
*    repeat the preceding thing zero or more times
$    match the end of line
0

sed "s/,[0-9].[0-9]\+\$//" <yourfile> выведет такие строки:

hstar, по умолчанию, "T9883Z", 0d59, c801,7332,5,20120914

0

Awk - намного более чистый инструмент для обработки табличных данных:

awk -F ',' ' { print $1,$2,$3,$4,$5,$6 }' file1 > temp1
awk -F ',' ' { print $1,$2,$3,$4,$5,$6 }' file2 > temp2
diff temp1 temp2

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .