1列目と2列目に基づいて結合/マージしようとしている2つのファイルがあります。以下は、私が探している望ましい出力です。1つ強調したいのは、交差点だけでなく、これら2つのファイルをマージしたいということです。どんな助けでも大歓迎です!
$ cat file1
2L 5753 33158
2L 8813 33158
2L 7885 33159
2L 1279 33159
2L 5095 33158
$
$ cat file2
2L 8813 0.6 1.2
2L 5762 0.4 0.5
2L 1279 0.5 0.9
$
Desired Output:
2L 5753 33158
2L 8813 0.6 1.2 33158
2L 7885 33159
2L 1279 0.5 0.9 33159
2L 5095 33158
2L 5762 0.4 0.5
私は同様の投稿を見つけましたが、私が考えていることを満たすためにいくつかの調整が必要なようです。URLは:同様のStackoverflowリンク
次のbashスクリプトは、file1から各行を読み取り、file2(のコピー)から対応する行を抽出し、両方の行をマージして、結果をstdoutに出力します。最後に、file2(残りの部分)が出力されます。
temp=$(mktemp)
cp file2 $temp
while read col1 col2 arg3; do
line=$(sed -r -i -e "/^$col1\ +$col2/ {w /dev/stdout" -e "d}" $temp)
arg1=$(awk '{print $3}' <<< $line)
arg1=${arg1:- }
arg2=$(awk '{print $4}' <<< $line)
arg2=${arg2:- }
echo -e "$col1\t$col2\t$arg1 $arg2\t$arg3"
done < file1
cat $temp
rm $temp
このsed
コマンドのアイデアは、を使用してファイルの最初の行を印刷および削除する際の、sed
dhakimianによるGillesの回答の拡張から採用されました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加