Вы используете i
, вместо этого используйте $i
в команде grep.
И вы сказали, что хотите поместить их все в один файл, тогда последняя команда должна быть:
cat >> /home/ubuntu/Project/working/output.txt
Или просто:
>> /home/ubuntu/Project/working/output.txt
Помимо исправления некоторых небольших опечаток в вашем исходном коде (, используя "$i"
вместо i
и перенаправляя вывод в выходной файл, а не пытаясь вывести его содержимое ), если вы не иметь много тысяч этих list.txt
файлов:
awk '/^bar[0-9]/ { print $1 }' /home/ubuntu/Project/working/library_*/Results/list.txt >output.txt
Это использование awk
для извлечения первого столбца всех строк, начинающихся со строки bar
, за которой следует цифра. Это делается для всех файлов, соответствующих шаблону /home/ubuntu/Project/working/library_*/Results/list.txt
. Извлеченные данные перенаправляются на output.txt
.
Цикл становится необходимым, когда шаблон подстановки имен файлов /home/ubuntu/Project/working/library_*/Results/list.txt
расширяется до слишком большого количества имен:
for pathname in /home/ubuntu/Project/working/library_*/Results/list.txt; do
awk '/^bar/ { print $1 }' "$pathname"
done >output.txt
Обратите внимание, что более эффективно перенаправлять вывод цикла , чем каждого отдельного вызова awk
. Также обратите внимание, что awk
легко выполняет работу grep
по обнаружению нужных строк и что cat
не требуется.
Если вам нужен первый столбец из всех строк, кроме первой (, как в вашем примере данных ), вы можете изменить условие в коде awk
с /^bar[0-9]/
на FNR > 1
.