Только распечатайте строки, которые имеют 2 или больше поля?

Bash не может иметь дело с десятичными числами, но он может обработать простое управление целыми числами, просто необходимо использовать прием как замена процесса для создания переменной доступной вне цикла:

n=0;while read i; do let n+=$i; done < <(awk '{print $1}' foo); echo $n;

или

n=0;while read i; do n=$((n+i)); done < <(awk '{print $1}' foo); echo $n;

n=0 должен там только удостовериться это $n всегда 0, иначе, выполняя эти команды, которые второй раз возвратил бы 252 вместо 126.


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

awk '{print $1}' foo | perl -lne '$k+=$_;END{print "$k"};'

-l флаг удаляет новые строки (chomp) и добавляет один в конец каждой печатной строки, -n средства читают файл линию за линией, сохраняя каждую строку как $_ и запущенный скрипт, обеспеченный -e.

Или сделайте все это в Perl:

perl -alne '$k+=$F[0];END{print "$k"};' foo

-a флаг для Perl включает автоматическое разделение строки (как gawk). По умолчанию поля разделяются на пробелах, но это может быть изменено с помощью -F. Получающиеся поля сохраняются как @F выстройте, таким образом, 1-е поле $F[0].

3
06.03.2014, 23:18
3 ответа
Если вы хотите сохранить строки, содержащие данные не менее чем в 2 полях:[12174]
11
27.01.2020, 21:07
Необходимо поменять разделитель полей на запятую, также не должно быть [11801]$[11802] перед [11803]NF[11804], если нужно количество полей ([11805]$NF[11806] является последним полем). Наконец, строки, заканчивающиеся запятой, считаются пустым вторым полем, поэтому следует исключить строки, где последнее поле пустое:[12171]Update[12172]Из комментария Стефана, я явно неправильно прочитал вопрос. Печать строк, содержащих более одного незаполненного поля, с помощью [11807]awk[11808] намного сложнее:[12173]Для этого [11809]grep-подход Стефана[11810] намного лучше..
7
27.01.2020, 21:07

ты должен:

  1. установить запятую как «разделитель полей по умолчанию»,

  2. Вопрос, больше ли число полей, чем 1, и есть ли содержимое в поле номер 2.

  3. Распечатайте всю строку (регистра ), используя переменную $0.

  4. Ваши данные хранятся в файле :data -Exercise.txt

Это код:

awk 'BEGIN{FS=",";}{if(NF>1 && $2!="") print $0;}' data-exercise.txt

1
27.01.2020, 21:07

Теги

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