2017-01-24 5 views
0

У меня есть файл с чем-то вроде этого:Bash скрипт удаление строк из текстового файла

sda    204.98   0.00 104947.26   0  210944 
sda    205.50   0.00 104458.00   0  208916 
sda    212.50   0.00 108800.00   0  217600 
sda    225.00   0.00 114698.00   0  229396 
sda    207.00   0.00 105728.00   0  211456 
sda    187.00   0.00  94988.00   0  189976 
sda    373.50  3704.00  2248.00  7408  4496 
sda    419.50  4152.00  2508.00  8304  5016 
sda    390.50  3696.00  2506.00  7392  5012 

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

sda    373.50  3704.00  2248.00  7408  4496 
sda    419.50  4152.00  2508.00  8304  5016 
sda    390.50  3696.00  2506.00  7392  5012 

Я попытался с AWK «($ 6 < .....)» но не имеет никакого эффекта.

Как это сделать?

ответ

3

Это легко сделать с помощью awk. Попробуйте следующий сценарий:

awk -v max=100000 '$3 && $5 && $6 < max' data 

Это обеспечивает поля 3 и 5 отличны от нуля ($ 3 является обобщающим для $3 != 0), а последнее поле имеет 5 или меньше цифр.

Поскольку поведение по умолчанию awk заключается в том, чтобы распечатать всю строку, это выведет все строки, удовлетворяющие этому условию.

+0

Почему вы хотите ответить, когда OP абсолютно не предпринимает никаких попыток и просто просит для меня код? Не поощряйте это делать. Я намеренно удалил ответ и попросил другого плаката сделать то же самое, чтобы улучшить этот вопрос. – Inian

+0

Ответ был обновлен тем временем, и для меня, по крайней мере, ясен. – setempler

+0

@setempler: Не уверен, что вы имеете в виду. Я хотел сохранить этику сообщества, попросив OP опубликовать свою исследовательскую попытку, прежде чем публиковать ответы, которые явно нарушали Асерр. – Inian

2

Вы можете использовать awk в Баш скрипт, как:

awk '($3 > 0 && $5 > 0) {print}' file 

или

awk '($3 != 0 && $5 != 0) {print}' file 

или в соответствии с вашим редактирования (минимальное значение в последнем столбце):

awk '($3 != 0 && $5 != 0) || ($6 > 9999) {print}' 

Где

  • $3 и $5 являются 3-й и 5-й переменных столбцов,
  • и сценарий проверки, если значения в этом столбце > 0 (больше 0) или != 0 (не равно 0), то
  • это print с линией file.
Смежные вопросы