tmpfile=$( mktemp )
for pathname in /path/to/dir/*.csv; do
head -n 1 "$pathname" >"$tmpfile"
cat "$tmpfile >"$pathname"
done
rm "$tmpfile"
Ou seja, extraia o cabeçalho usando head -n 1
para um arquivo temporário (supondo que seja apenas a primeira linha), trunque o arquivo original e insira o cabeçalho do arquivo temporário.
Se o cabeçalho for exatamente idêntico em todos os arquivos:
tmpfile=$( mktemp )
set -- /path/to/dir/*.csv
head -n 1 "$1" >"$tmpfile"
for pathname do
cat "$tmpfile" >"$pathname"
done
rm "$tmpfile"
Isso primeiro define os parâmetros posicionais para a lista de arquivos nos quais estamos interessados e, em seguida, extrai o cabeçalho do primeiro deles. O loop itera sobre os parâmetros posicionais (os arquivos CSV) e trunca cada um, inserindo o cabeçalho.
Em ambos os exemplos acima, assume-se que o padrão /path/to/dir/*.csv
corresponde a todos arquivos afetados. Um exemplo do mundo real de um padrão real pode ser
/var/log/myprogram/dir1/*.csv /var/log/myprogram/dir2/*.csv
ou, se você estiver usando um shell que compreenda a expansão de chaves:
/var/log/myprogram/{dir1,dir2}/*.csv