次の2つのサンプルファイルがあります。
$ cat file1
abc,sachin
cat,kumar
$ cat file2
xyz
pressure
$ cat file3
xyz,sachin
pressure, kumar
file1
最初の列をfile2
。
私は次のようにします:
$ awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' file1 file2
私はSolaris 10を使用していますが、この機能をサポートしていないようです。他に提案がありますか?
答え1
cut
とを使うのはどうですかpaste
?シェルがプロセス置換をサポートしている場合
$ paste -d, file2.txt <(cut -d, -f2 file1.txt)
xyz,sachin
pressure,kumar
答え2
入力フィールド区切り文字を指定する必要があります。また、どの分野を選択しているのかわかりません。 awkでは、フィールドは1から始まります。両方の入力ファイルに3つのフィールドがありません。
これはあなたが助けるでしょう:
awk -F, 'FNR==NR{a[NR]=$1;next}{$1=a[FNR]}1' OFS=, file2.txt file1.txt
サンプル入力の場合、次のものが生成されます。
xyz,sachin
pressure,kumar
答え3
/usr/xpg4/bin/awk
@devnullの答えまたはを試してくださいnawk
。
/usr/bin
以下/bin
と上記のプログラムの多くは互換性がSolaris
ありPOSIX
ません。
perl
またはポータブルとして使用できます。
$ perl -nle '
unless (/,/) {
push @a, $_;
next;
}
@l = split ",", $_;
print "$a[$i++],$l[1]";
' file2.txt file1.txt
xyz,sachin
pressure,kumar
短く:
$ perl -F',' -anle '
if (@F == 1) {push @a,$_;next}
print "$a[$i++],$F[1]";
' file2.txt file1.txt