列がタブで区切られた異なる形式の2つのファイルがあります。の列をとcolumn1
比較する必要があります。一致する場合は、の値をの値に置き換える必要があります。試してみましたが、値を置き換えることはできません。以下のコードスニペットの提案を提供できますか?column2
file1
file2
column6
file1
column3
file2
awk
awk 'FILENAME == ARGV[1] {
m[$1,$2] = $6;
next;
}
{
if (($1,$2) in m) {
m[$6]= $3; print m[$6];
}
}' file1 file2
top few lines of file1
1201 12011 1 0 0 0 1
1202 12021 1 0 0 0 1
1203 12031 1 0 0 0 1
1204 12041 1 0 0 0 2
1207 12071 1 0 0 0 2
1209 12091 1 0 0 0 1
1210 12101 1 0 0 0 1
1212 12121 1 0 0 0 1
1213 12131 1 0 0 0 1
1214 12141 1 0 0 0 2
top few lines of file2
1201 12011 1
1202 12021 1
1203 12031 1
1204 12041 1
1206 NA 1
1207 12071 2
1208 NA 1
1209 12091 2
1210 12101 2
更新された内容を別のファイルに書きたいので、file2の値をfile1列に割り当てたいと思います。out.txt
編集する
コメントに基づいて次のコードを試しました。
awk '{
if (FNR==NR) {
a[FNR]=$1;b[FNR]=$2;c[FNR]=$3}
else {
if (a[FNR] == $1 && b[FNR] ==$2) {
$6=c[FNR]} else {$6=$6};
print $0;
}
}' file2 file1
この出力を得る
1201 12011 1 0 0 1 1
1202 12021 1 0 0 1 1
1203 12031 1 0 0 1 1
1204 12041 1 0 0 1 2
1207 12071 1 0 0 0 2
1209 12091 1 0 0 0 1
1210 12101 1 0 0 0 1
1212 12121 1 0 0 0 1
1213 12131 1 0 0 0 1
1214 12141 1 0 0 0 2
ベストアンサー1
awk -F"\t" -v OFS="\t" '{
if (FNR==NR) {
a[FNR]=$1;b[FNR]=$2;c[FNR]=$3}
else {
if (a[FNR] == $1 && b[FNR] ==$2) {
$6=c[FNR]} else {$6=$6};
print $0
}
}' file2 file1
私はこれが仕事を終えると思います。まず、それぞれインデックスを使用して、file2の最初、2番目、および3番目の列をarrayに格納しますa
(file2の行のみ)。 Else (file1 の行のみに適用) 配列 sum の値を sum と比較します。一致する場合は、配列の6番目のフィールドを変更します。それ以外の場合は、値を同じ値に再割り当てし、区切り文字を 。b
c
FNR
FNR = NR
a
b
$1
$2
c
tab