Если вы хотите посчитать количество строк в файле, который начинается с 0, то эта строка неверна.
linesToRemove=$(awk '/^0/ { print NR; }' ${inputFile});
Выше указано, что нужно печатать номер строки, когда строка начинается с 0, а ваша переменная linesToRemove
будет содержать все номера строк, а не общее количество строк. Используйте блок END{}
, чтобы получить общее количество. например,
linesToRemove=$(awk '/^0/ {c++}END{print c}' ${inputFile});
Что касается вашего второго вопроса об использовании переменной внутри awk, используйте оператор регулярного выражения ~
. А затем установите переменную myIndex
для включения ^
якоря
linesToRemove=$(awk -v myIndex="^$myIndex" '$0 ~ myIndex{ print NR;}' ${inputFile});
наконец, если вы просто хотите удалить те строки, которые начинаются с 0, просто удалите их
awk '/^0/{next}{print $0>FILENAME}' file
Если вы хотите удалить строки из другого файла, используя то, что записано во входном файле, вот один из способов
paste -d"|" inputfile anotherfile | awk '!/^0/{gsub(/^.*\|/,"");print}'
Или только одна awk
команда
awk 'FNR==NR && /^0/{a[FNR]} NR>FNR && (!(FNR in a))' inputfile anotherfile
грубое объяснение: FNR == NR && / ^ 0 / означает, что вся первая строка файла начинается с 0 и помещается в строку a
. NR>FNR
означает обработку следующего файла и, если номер строки отсутствует в массиве, выведите строку. См. Документацию gawk, что означает FNR, NR и т. Д.