• XSS.stack #1 – первый литературный журнал от юзеров форума

Как на sed/awk прочитать контент файлов и добавить в каждой строке файла его имя?

hoirslkdut

base
Пользователь
Регистрация
16.03.2022
Сообщения
74
Реакции
33
Подскажите как на sed/awk в взять список файлов, и к каждой строке в файле, добавить имя файла откуда взята строка.

Допустим у нас есть такие файлы:

1.txt
2.txt
3.txt

1.txt содержит aaaaaa , 2.txt bbbbbb и 3.txt ccccccc

Нужно соорудить команду чтобы на выходе был файл в котором:

aaaaaaa1.txt
bbbbbbb2.txt
ccccccc3.txt

Учитывая что строк в файлах может быть больше чем одна.

Пока соорудил только такое:

ls | awk "{print}" | xargs cat

Но оно мне просто тогда выводит сначала контент всех файлов, а потом их имена, а надо чтобы именно добавлялось имя к каждой строке в этом файле
 
Пожалуйста, обратите внимание, что пользователь заблокирован
У меня оочень извращенно получилось, но на скорую руку пойдет думаю.
xargs cat выводит весь контент. Не совсем понял, как ты хочешь чтобы было, но я сделал вывод только первой строки.
ls | awk '{cmd="filename=$1";content=$(head -1 " $1 "); echo $content$filename"; sytem(cmd)}' > res.txt
Думаю, что как-то сделать, чтобы было вообще без вызова awk, но моих познаний не хватает в этом.

тест был такой:
Код:
1.txt
aaaaaaaa
421421 <random content>
1243211

2.txt
bbbbbbbbb

3.txt
cccccccccc
После запуска только 1 строка + имя файла.
Может гуру баш скриптинга подскажут, как избавиться от awk или как сделать лучше)))

upd: точнее тут больше вопрос в том, как получить аргумент из пайпа. Тогда бы без awk можно было бы обойтись
 
Последнее редактирование:
[en]
Here is my way of doing this:

[ru]
Вот мой способ сделать это:

files:
Bash:
sh-5.1$ cat 1.txt
ONE lalala
ONE lololo
ONE lelelel
sh-5.1$ cat 2.txt
TWO lalala
TWO lololo
TWO lelelel
sh-5.1$ cat 3.txt
THREE lalala
THREE lololo
THREE lelelel


Solution:
Bash:
$ for file in $(ls .); do while read -r line; do printf "%s %s\n" "$(echo -n $line | tr -d '\n')" $file; done < $file ; done
ONE lalala 1.txt
ONE lololo 1.txt
ONE lelelel 1.txt
TWO lalala 2.txt
TWO lololo 2.txt
TWO lelelel 2.txt
THREE lalala 3.txt
THREE lololo 3.txt
THREE lelelel 3.txt
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх