Unix извлечь строки из файла и объединить

У меня есть 10 файлов. Каждый файл содержит несколько строк, но меня интересуют две конкретные строки.

Допустим, формат двух строк:

test1_hello
test2_world

Второй файл содержит:

test1_hallo
test2_germany 

То, что я хочу сделать, это запустить рекурсив над файлами и извлечь соответствующие строки из каждого файла в один основной файл.

Таким образом, содержимое конечного результата final_file будет:

helloworld
hallogermany 

Это возможно в однострочной команде в Bash?

2 ответа

Вот то, что может быть близко к тому, что вы ищете:

for f in * ; do sed 's#[^_]*_##' $f | tr -d '\n' ; echo ; done

sed удалит часть перед первым _ (в том числе _) путем подстановки регулярного выражения [^_]*_ пустой строкой и tr удалит символы новой строки (\n). С вашим примером:

$ cat f1
test1_hello
test2_world
$ cat f2
test1_hallo
test2_germany
$ for f in * ; do sed 's#[^_]*_##' $f | tr -d '\n' ; echo ; done
helloworld
hallogermany
for file in $(ls -1); do grep ^test* $file | awk -F'_' '{print $2}' >> myfile;done
Другие вопросы по тегам