Это не проблема ОС.Когда вы перенаправляете вывод в new.csv
, оболочка сначала создает этот файл, прежде чем вычисляется выражение glob *.csv
.Это означает, что расширение *.csv
также будет включать new.csv
.Это похоже на основную причину рекурсивной проблемы grep, с которой вы сталкиваетесь.
Вы читаете все файлы дважды, что не является необходимым.Вы можете сделать свою работу намного проще и эффективнее с помощью одной команды awk
:
awk 'NR==1 {print} tolower($0) ~ /hello/ {print}' *.csv > csv.new
mv csv.new new.csv
- , поскольку выходной файл называется
csv.new
, он не будет мешать работе с глобусом *.csv
NR==1
берет первую строку (заголовок) из самого первого файла
Команда awk может быть записана более кратко как:
awk 'NR==1 || tolower($0) ~ /hello/' *.csv > csv.new