Длина определенного поля и отображение записи гораздо более простым способом

#bash #shell #unix

#bash #оболочка #unix

Вопрос:

Моя цель — узнать длину второго поля, и если длина превышает пять символов, тогда мне нужно показать всю запись с помощью сценариев / команд оболочки.

 echo "From the csv file"
cat latency.csv  |
while read line
do
        latency=`echo $line | cut -d"," -f2 | tr -d " "`
        length=$(echo ${#latency})
        if [ $length -gt 5 ]
        then
                echo $line
        fi
done
  

В моем коде нет ничего плохого, но, будучи UNIX / Linux, я подумал, что должен быть более простой способ делать такие вещи.

Есть ли один такой более простой метод?

Ответ №1:

 awk -F, 'length($2)>5' file
  

это должно сработать

обновлено

  awk -F, '{a=$0;gsub(/ /,"",$2);if(length($2)>5)print a}' file
  

Комментарии:

1. За исключением того, что плакат хочет игнорировать пробелы в полях, как указано tr -d " " .

2. Да, к сожалению, в полях есть пробелы, которые я хочу игнорировать. Я не могу сократить пробелы в выходных данных, но при выполнении длины мне нужно удалить пробелы.

Ответ №2:

 awk -F, '{
  t = $2
  gsub(/ /, x, t)
  if (length(t) > 5)
    print
  }' latency.csv
  

Или:

 perl -F, -ane'
  print if 
    $F[1] =~ tr/ //dc > 5
  ' latency.csv