Aspas simples impedem a expansão: cada caractere em uma cadeia de aspas simples é interpretado literalmente (exceto '
em si que termina a string). Portanto, quando você quiser que *
aja como um caractere curinga, deixe-a fora das aspas. (Aspas duplas também evitam que *
atue como curinga).
for file in A_*.CSV …
O resto do seu código atualizado provavelmente está ok, mas você deve coloca aspas duplas em torno das substituições de variáveis , caso contrário, mais cedo ou mais tarde, ele vai te morder.
Você pode fazer o redirecionamento fora do loop. Isso é um pouco mais rápido.
for file in A_*.CSV
do
awk -F, 'NR==1 {print $0}' "$file"
done >> Newheader.csv
Este snippet é anexado a Newheader.csv
. Se você quiser sobrescrever o arquivo quando ele já existir, como em seu código original, substitua >>
por >
.
Existem várias maneiras de simplificar seu script, se tudo o que você deseja é imprimir a primeira linha de vários arquivos. Como você está imprimindo a primeira linha, -F,
não é usado. Além disso, você pode usar head -n 1
em vez de awk 'NR == 1 {print $0}'
. No Linux (mas não em todas as variantes do Unix), para imprimir apenas a primeira linha de vários arquivos, você pode usar head
sem nenhum loop:
head -q -n 1 A_*.CSV >Newheader.csv
Você também não precisa de um loop com o awk, veja a resposta do Archemar .