Как напечатать вывод двух команд оболочки в одной строке? - PullRequest
0 голосов
/ 13 ноября 2018

Вот что содержит мой цикл:

cat /$f/stat | awk '{print $1,$3,$4,$7,$17}' /$f/stat 
cd $f 
sudo ls fd | wc -l  
cd ..

Сначала показывается:

cat /$f/stat | awk '{print $1,$3,$4,$7,$17}' /$f/stat

И выводит это в новой строке:

cd $f 
sudo ls fd | wc -l  
cd ..

Как мне объединить их, чтобы они отображались в одной строке?

1 Ответ

0 голосов
/ 13 ноября 2018

Сначала используйте shellcheck для проверки вашего скрипта.

Похоже, вы хотите, чтобы вывод awk и вывод wc -l находились в одной строке. Используйте подстановку команд для этого:

printf '%s %s\n' "$(awk '{print $1,$3,$4,$7,$17}' "$f/stat")" "$(sudo ls "$f/fd" | wc -l)"
  • нет необходимости в cat | awk, что в случае UUOC - awk читает входные данные из файла, переданного в качестве аргумента; Кроме того, похоже, вам нужно "$f/stat", а не "/$f/stat"
  • заключать переменные в двойные кавычки, чтобы предотвратить разбиение и разбивание слов
  • использовать полный путь $f/fd вместо необходимости делать cd $f и обратно

Поскольку анализ ls вывода считается плохой практикой , вы можете сделать это вместо этого в Linux:

printf '%s %s\n' "$(awk '{print $1,$3,$4,$7,$17}' "$f/stat")" "$(sudo find "$f/fd" -maxdepth 1 -print0 | tr -cd '\0' | wc -c)"
  • find ... -print0 печатает оконченный список файлов NUL
  • tr -cd '\0' - удаляет все символы, кроме NUL
  • wc -c - подсчитывает количество NUL, которое является числом имен файлов в find вывод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...