2017-02-14 2 views
0

У меня есть файл CSV с именем, как "awk_column_select_test.csv"AWK, чтобы выбрать столбцы из файла больше, чем определенное количество

a,b,c 
0.2,0.4,0.5 
0.3,0.6,0.7 
0.4,0.8,0.9 

Я пытаюсь написать код AWK для выбора строки, в которых либо столбец 1 или столбец 2 или столбец 3 отлично, чем 0,5.

Моя программа AWK, названный "awk_select_column_test.awk" выглядит следующим образом:

#!/usr/bin/awk -f 

BEGIN {FS=","; cutoff="0.5"} 
{$1 > cutoff || $2 > cutoff || $3 > cutoff} 
END {print} 

Затем я попытался запустить в командной строке с помощью:

awk -f awk_select_column_test.awk awk_column_select_test.csv 

я получил следующий вывод только с 1 ряд:

0.4,0.8,0.9 

Однако я надеялся получить 2 строки следующим образом:

0.3,0.6,0.7 
0.4,0.8,0.9 
+1

Спасибо всем за большую помощь. Я попытался удалить цитату из 0,5 и удалить фигурные скобки {} и «END {print}». Тогда это работает. Функциональный код: – JeffZheng

+1

'BEGIN {FS =", "; cutoff = 0.5} ' ' $ 1> cutoff || $ 2> обрезание || $ 3> cutoff 'Удивительно, если я цитирую 0.5 или использую курчавую {}, или использую« END {print} », это не сработает. Мне было интересно, можете ли вы объяснить, почему это не работает, чтобы указать 0.5 или использовать курчавый {} или использовать последний оператор печати. Благодарю. – JeffZheng

ответ

1

У вас есть лишние фигурные скобки {} и END блока печать последней строки, логики все в порядке.

#!/usr/bin/awk -f 

BEGIN {FS=","; cutoff=0.5} 
NR>1 && ($1 > cutoff || $2 > cutoff || $3 > cutoff){print} 

Это можно записать также

#!/usr/bin/awk -f 

BEGIN {FS=","; cutoff=0.5} 
NR>1 && ($1 > cutoff || $2 > cutoff || $3 > cutoff) 
+0

Большое спасибо! Не могли бы вы объяснить, почему скобки(), но не курчавые {}, вокруг «$ 1» cutoff || $ 2> cutoff || $ 3> cutoff "работает? Благодаря! – JeffZheng

+0

'{x | y}' означает 'true {x | y} 'true - значение по умолчанию, а' x | y' - логическая операция, возврат которой теряется ..... вместо 'x | y {print}' сокращенно до 'x | y' означает печать, если' x | y' операция верна –

+0

Привет, Хосе, спасибо за ваше объяснение! – JeffZheng

Смежные вопросы