Замените первую строку выводом файла1 и добавьте содержимое файла 2 ко всем файлам в папке

Используйтеawk:

awk -F',' '!seen[$1,$2]++' file1 file2

Пояснение:

  • В начале элемент массива с ключевыми полями $1,$2не назначен, поэтому ложно.
  • Если оно ложно, !seenистинно, поэтому мы увеличиваем его (, делаем его истинным )и выполняем действие по умолчанию, которое равно print.
  • Если это правда, (второй раз, когда мы видим те же поля,)!seenневерно, и awkпропустит эту строку.
0
14.10.2020, 15:19
2 ответа

Вы можете использовать команду sed rдля чтения и вставки файлов верхнего и нижнего колонтитула по адресам 1и $соответственно.

Предполагая, что GNU sed (основан на вашем теге 'linux' )и что количество файлов в каталоге недостаточно велико, чтобы превысить максимальную длину команды, тогда

sed -i -e '1r header.txt' -e '1d' -e '$r footer.txt' dir/*

добавит содержимое header.txtи footer.txtк каждому файлу в dir.

Обратите внимание, что -iприводит к перезаписи исходных файлов-было бы разумно протестировать его с помощью -sвместо -iи/или сделать резервную копию, изменив -iна что-то вроде -i.bak.

0
18.03.2021, 22:57

Предположим, вы хотите удалить первую строку из всех файлов и вставить заголовок, а в конце добавить нижний колонтитул, используя оболочку bash:

for f in *.xml; do
    tmp=$(mktemp)
    ( 
        cat header.txt
        tail -n +2 "$f"
        cat footer.txt
    ) > "$tmp" && mv "$tmp" "$f"
done
0
18.03.2021, 22:57

Теги

Похожие вопросы