Учитывая следующую структура файла,извлечь каждую строку, за которой следует строка с другим значением в колонке два
9.975 1.49000000 0.295 0 0.4880 0.4929 0.5113 0.5245 2.016726 1.0472 -30.7449 1
9.975 1.49000000 0.295 1 0.4870 0.5056 0.5188 0.5045 2.015859 1.0442 -30.7653 1
9.975 1.50000000 0.295 0 0.5145 0.4984 0.4873 0.5019 2.002143 1.0854 -30.3044 2
есть способ, чтобы извлечь каждую строку, в которой значение в колонке два не равно значение в столбце два в следующей строке? I.e. из этих трех строк я хотел бы извлечь второй, так как 1.49 не равен 1.50. Может быть, с sed или awk?
Это, как я это сделать в MATLAB:
myline = 1;
mynewline = 1;
while myline < length(myfile)
if myfile(myline,2) ~= myfile(myline+1,2)
mynewfile(mynewline,:) = myfile(myline,:);
mynewline = mynewline+1;
myline = myline+1;
else
myline = myline+1;
end
end
Однако мои файлы настолько велики, теперь, когда я предпочел бы, чтобы осуществить эту добычу в терминале перед передачей их на моем ноутбуке.
Первая строка не требуется - из приведенного выше примера, только второй. Не могли бы вы подробнее рассказать о функции вашей команды? Я пытаюсь проверить это прямо сейчас, но ничего не происходит. – Ango
Вы не указали, где находятся ваши данные, поэтому я по умолчанию был stdin. Чтобы фактически использовать его, вам нужно поместить ваши данные в файл с каким-то именем, например 'data', а затем сделать' liborm
Ах, получилось - но он печатает третью строку из приведенного выше примера. Насколько я понимаю эту строку, это то, что происходит: сначала мы берем -1 в качестве ссылки, а затем переходим через столбец номер 2 и сравниваем каждое значение с ссылкой.в случае, если значения не совпадают, то текущая строка печатается, и опорное значение устанавливается равным значению из колонки 2 в этой строке. теперь мне нужно только выяснить, как заставить его распечатать предыдущую строку! – Ango