В ударе включите globstar опцию так, чтобы **
соответствия любой уровень подкаталогов. Можно сделать это от Вашего ~/.bashrc
. Также включите extglob
опции активировать ksh расширили шаблоны.
shopt -s globstar extglob
Затем:
grep PATTERN **/trunk/src/**/*.@(h|cpp)
Остерегайтесь того удара версии, до 4,2 следуют за символьными ссылками на каталоги, когда Вы используете **
.
Zsh делает это легче, Вы не должны устанавливать опции и можете просто ввести
grep PATTERN **/trunk/src/**/*.(h|cpp)
Если командная строка является слишком длинной, и Вы находитесь на Linux или другой платформе с GNU grep, можно сделать grep
рекурсивно вызовите вместо оболочки, чтобы экономить на длине командной строки.
grep -R --include='*.cpp' --include='*.h' PATTERN **/trunk/src
awk '{f1 = $0; getline<"file2"; print f1, $2}' < file1 > file3
Выходной файл будет иметь одинаковое количество строк, что и file1
, поэтому последний столбец будет пустым для последних строк, если File2
] короче, а последние значения в File2
будут проигнорированы, если оно больше.
В качестве альтернативы, как предложено Костас:
awk '{getline f1 <"file1" ; print f1,$2}' < file2 > file3
Это время, хотя File3
будет иметь такое же количество строк, как file2
. Это означает, что упорядочение столбцов будет затронуто, если File2
длиннее File1
.
С:
awk '{print $2}' < file2 | paste file1 - > file3
File3
будет иметь такое же количество строк, как самый большой из файлов
и File2
. Данные не будут отброшены, но, как указано выше, если File2
дольше, чем File1
, последние строки в File3
будут иметь File2
данные в первом / втором столбце.
Попытка
$ awk 'NR==FNR{a[NR]=$2;next}{print $0,a[FNR]}' file2 file1
col11 col12 col13 ... col1n col22
{[НОМЕР] = 2$; затем}
часть будет выполняться только для первого файла в списке ( file2
), и когда awk
обработает второй файл ( file1
), мы печатаем целую строку file1
и добавляем элемент таблицы [FNR]
, который содержит значение второго поля file2
.