Это зависит от версии или реализации cut
на вашей машине. Некоторые версии поддерживают опцию, обычно -i
, которая означает «игнорировать пустые поля» или, что эквивалентно, допускает использование нескольких разделителей между полями. Если это поддерживается, используйте:
cut -i -d' ' -f 2 data.file
Если нет (и это не универсально - и, возможно, даже не распространено, поскольку ни GNU, ни MacOS X не имеют такой возможности), то использование awk
лучше и более переносимо.
Вам нужно направить вывод awk
в ваш цикл, хотя:
awk -F' ' '{print $2}' ${Directory_path}/test_file.txt |
while read readline
do
read_int=`echo "$readline"`
cnt_exc=`grep "$read_int" ${Directory_path}/file1.txt| wc -l`
if [ $cnt_exc -gt 0 ]
then int_1=0
else int_2=0
fi
done
Единственная остаточная проблема заключается в том, находится ли цикл while
в под-оболочке и, следовательно, не изменяет ли переменные ваших основных сценариев оболочки, а только свою собственную копию этих переменных.
С bash вы можете использовать процесс подстановки :
while read readline
do
read_int=`echo "$readline"`
cnt_exc=`grep "$read_int" ${Directory_path}/file1.txt| wc -l`
if [ $cnt_exc -gt 0 ]
then int_1=0
else int_2=0
fi
done < <(awk -F' ' '{print $2}' ${Directory_path}/test_file.txt)
Это оставляет цикл while
в текущей оболочке, но обеспечивает вывод команды, как будто из файла.
Пробел в ${Directory path}
обычно недопустим - если только это не другая функция Bash, которую я пропустил; у вас также была опечатка (Directoty
) в одном месте.