
912300001.file1.txt と file2.txt という 2 つのファイルがあり、次の内容が含まれているとします。
912300001.ファイル1.txt
VALUE 1000 -21 -21
VALUE 1001 -23 -22
VALUE 1002 -23 -21
最初の列は重要ではありません。2 番目の列は両方のファイルに存在するカウンターであり、マージ時に確認する列の 1 つです。3 列目と 4 列目は、マージする列です。
ファイル2.txt
-123456.12 -1234567.12 912300001 1000 123.1 123.1 ab 1 3
-123466.12 -1234667.12 912300001 1001 133.1 124.1 ab 2 2
-123476.12 -1234767.12 912300001 1002 143.1 125.1 ab 3 1
-123486.12 -1234867.12 922300001 1000 153.1 126.1 ab 3 1
-123496.12 -1234967.12 922300001 1001 163.1 127.1 ab 2 2
-123446.12 -1234367.12 922300001 1002 173.1 128.1 ab 1 3
3 番目の列 (例: "912300001") を最初のファイルの名前の数字と比較し、カウンター "1000" を最初のファイルのカウンターと比較します。両方が一致する場合、最初のファイルの列 3 と 4 の値を 2 番目のファイルにコピーして、次の処理を実行します。
出力.txt
-123456.12 1234567.12 912300001 1000 123.1 123.1 ab 1 3 -21 -21
-123466.12 1234667.12 912300001 1001 133.1 124.1 ab 2 2 -23 -22
-123476.12 1234767.12 912300001 1002 143.1 125.1 ab 3 1 -23 -21
-123486.12 1234867.12 922300001 1000 153.1 126.1 ab 3 1 Values from
-123496.12 1234967.12 922300001 1001 163.1 127.1 ab 2 2 other files
-123446.12 1234367.12 922300001 1002 173.1 128.1 ab 1 3 will come in here
可能であれば、チェックする必要があるファイルのリストを外部ファイル(例:list.txt)で提供したいと思います。
ありがとう、
編集:解決策はredditユーザーによって提供されました:commandlineluserとropid糸解決策は次のとおりです。
#!/bin/bash
{
read -r line
read -r _ _ prev_name prev_count _ <<< "$line"
declare -A lookup
while read -r _ key value
do
lookup[$key]=$value
done < <( sed '$a\' "$prev_name.file1.txt" )
echo "$line ${lookup[$prev_count]}"
while read -r line
do
read -r _ _ name count _ <<< "$line"
[[ $name != $prev_name ]] && {
lookup=()
while read -r _ key value
do
lookup[$key]=$value
done < "$name.file1.txt"
}
prev_name=$name
prev_count=$count
echo "$line ${lookup[$prev_count]}"
done
} < file2.txt
ありがとう、