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