Как распечатать строку в конце строки с помощью awk?

С пасты :

$ echo '********************************' | paste -sd$'\n' file1 - file2
0
25.07.2014, 08:23
2 ответа

В awk с помощью $N можно прямо в поля назначить номер поля для N: $9 = "YES" добавит в конец новое поле со значением "YES":

awk -F, -v OFS=, '{ if ($5 > 5) { $9 = "YES" } else {$9 = "NO"} };1' data

При присваивании в $9 мы создаем девятое поле, которое для этих данных является одним за концом. Поставив в конце 1 силы awk, мы получим выход по умолчанию, который в противном случае мы бы подавили.

Для вашего примера вышеприведенное дает:

,2013-11-22,12.9,26.0,26.6,,,NW,YES

то, что я думаю, является тем, что вы хотели.

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

awk -v OFS=, -F, '{ if ($5 > 5) {$(NF+1)="YES"} else {$(NF+1)="NO"} };1' data

$ принимает любое числовое выражение, поэтому мы можем добавить одно к NF, чтобы получить доступ к следующему доступному полю.

2
28.01.2020, 02:20

Более короткое решение awk:

$ awk -F',' '$(NF+1) = $5 > 0 ? "YES" : "NO"' OFS=',' file

Если ваш файл содержит windows символ новой строки, вы можете удалить его:

$ awk -F',' '{sub(/\r$/,"")} $(NF+1) = $5 > 0 ? "YES" : "NO"' OFS=',' file
2
28.01.2020, 02:20

Теги

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