Для цикла для итерации по дереву каталогов, извлекающего результаты из файлов с одинаковым именем [закрыто]

0
27.05.2019, 08:31
2 ответа

Вы используете i, вместо этого используйте $iв команде grep.

И вы сказали, что хотите поместить их все в один файл, тогда последняя команда должна быть:

cat >> /home/ubuntu/Project/working/output.txt

Или просто:

>> /home/ubuntu/Project/working/output.txt
0
28.01.2020, 03:39

Помимо исправления некоторых небольших опечаток в вашем исходном коде (, используя "$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.

0
28.01.2020, 03:39

Теги

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