Используйтеawk
:
awk -F',' '!seen[$1,$2]++' file1 file2
Пояснение:
$1,$2
не назначен, поэтому ложно. !seen
истинно, поэтому мы увеличиваем его (, делаем его истинным )и выполняем действие по умолчанию, которое равно print
. !seen
неверно, и awk
пропустит эту строку. Вы можете использовать команду 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
.
Предположим, вы хотите удалить первую строку из всех файлов и вставить заголовок, а в конце добавить нижний колонтитул, используя оболочку bash:
for f in *.xml; do
tmp=$(mktemp)
(
cat header.txt
tail -n +2 "$f"
cat footer.txt
) > "$tmp" && mv "$tmp" "$f"
done