Que tal usar cut
e paste
? Se o seu shell suporta substituições de processos, então
$ paste -d, file2.txt <(cut -d, -f2 file1.txt)
xyz,sachin
pressure,kumar
Eu tenho dois arquivos de exemplo como este:
$ cat file1
abc,sachin
cat,kumar
$ cat file2
xyz
pressure
$ cat file3
xyz,sachin
pressure, kumar
Eu quero que a primeira coluna de file1
seja substituída por file2
.
Eu tentei fazer algo assim:
$ awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' file1 file2
Estou usando o Solaris 10 e ele não parece suportar isso. Alguma outra sugestão?
Que tal usar cut
e paste
? Se o seu shell suporta substituições de processos, então
$ paste -d, file2.txt <(cut -d, -f2 file1.txt)
xyz,sachin
pressure,kumar
Você precisa especificar o separador de campo de entrada. Além disso, não tenho certeza de como você está escolhendo os campos. No awk, os campos são baseados em 1. Você não tem 3 campos em nenhum dos arquivos de entrada.
O seguinte deve funcionar para você:
awk -F, 'FNR==NR{a[NR]=$1;next}{$1=a[FNR]}1' OFS=, file2.txt file1.txt
Para sua entrada de exemplo, ela produziria:
xyz,sachin
pressure,kumar
Você deve tentar a resposta do @ devnull com /usr/xpg4/bin/awk
ou nawk
.
Muitos dos programas em /usr/bin
e /bin
em Solaris
não são POSIX
compatíveis.
Ou você pode usar perl
para portáteis:
$ perl -nle '
unless (/,/) {
push @a, $_;
next;
}
@l = split ",", $_;
print "$a[$i++],$l[1]";
' file2.txt file1.txt
xyz,sachin
pressure,kumar
Ainda mais curto:
$ perl -F',' -anle '
if (@F == 1) {push @a,$_;next}
print "$a[$i++],$F[1]";
' file2.txt file1.txt
Tags perl awk sed csv shell-script