сравнить - строка больше или меньше, чем предыдущая в bash - PullRequest
0 голосов
/ 05 июля 2018

Привет и спасибо за чтение. Это кажется очень простым, все, что мне нужно, это цикл for.

У меня есть огромный файл данных,

212
265
2321
12
183

и т. Д.

Все, что мне нужно, это добавлять «>» в ​​конце каждой строки, если значение меньше предыдущего, а «<» 1, если значение меньше предыдущего. Таким образом, мой желаемый результат будет </p>

212 <
265 >
2321 > 
12 <
183 >

Этот код

awk '{if ($1<prev); print ("<"); prev=$0}' input > output

просто дает <для всех строк. </p>

Как сделать это в awk или любом другом bash?

1 Ответ

0 голосов
/ 05 июля 2018
$ awk '{print $0, ($0 > prev ? ">" : "<"); prev=$0}' file
212 >
265 >
2321 >
12 <
183 >

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

$ awk '{print $0, ((NR > 1) && ($0 > prev) ? ">" : "<"); prev=$0}' file
212 <
265 >
2321 >
12 <
183 >

почему ваш код не работал, вы написали:

{if ($1<prev); print ("<"); prev=$0}

, что:

{if ($1<prev); # Test $1 vs prev but then do nothing based on the result of the
               # comparison since the semi-colon terminates the conditional block
print ("<");   # Always print a "<" symbol for every input line
prev=$0}       # Set prev to the current lines value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...