私は自分の問題を解決する方法を探していましたが、あきらめました。私はスクリプト作成にかなり慣れていないので、ご容赦ください。これは私がやろうとしていることです:
6列のファイル(file1と呼びましょう)があります。最初の列には ID があり、7 番目には代替 ID がありますが、その列全体が空です:
ID col2 col3 col4 col5 col6 AltID AltID2
a a x 43 5 54 A1 D3
b f 4 44 9 51 B3 KL5
c h k 90 0 52 K9 JD3
...
別のファイル セット (正確には 6 つ) があり、それぞれに 8 つの列があります (タブ区切りのファイルです)。4 番目の列には、File1 の ID と一致する ID が含まれています。col=ID ですが、順序はランダムです。
私がする必要があるのは、私が持っている他の 6 つのファイルの 4 列目の File1 から 1 列目の各行のすべての ID を検索し、一致する場合は、その一致を File1 の 7 列目に配置することです。
もう 1 つのトリッキーな点は、これらの ID の一部が完全に欠落しており (その場合は「x」が必要です)、別の場合には複数の代替 ID があります (この場合、それらを隣り合わせに配置します)。 File1 の 7 列目と 8 列目)
少しgrepを試してみましたが、awkの方が実際にはこれに適していると言っている人に出くわしました。スクリプトを作成してみましたが、次のようになりました。
#! /bin/bash
while read fn; do
STR =$(echo -ne "${fn}" ; awk ' { if($4=="${fn}") printf "%s\t", $7} ' ./*.txt)
echo $STR > test.txt
done < dreg.txt
それは明らかに機能しませんでした。コードは、自分が何をしているのかよくわからないように見えますが (そうではありませんでした)、ここから始めました。私は基本的に、テキストを含む最初の列のみで作成したダミー ファイルを読み込もうとして、そのディレクトリ内の他のすべてのテキスト ファイルのすべての行を検索していました。次に、見つかった場合は、ID の名前をエコーし、その後に代替 ID を続けて、次の形式を取得することを望んでいました。
ID AltID AltID2
私の計画は、これらの結果をファイルに出力してからそこから移動することでしたが、うまくいきませんでした。これは最も洗練されたソリューションではありませんが、前述したように、私はこれにあまり精通していません。
皆さんの助けがあれば大歓迎です。別の例が必要な場合、または私が物事を明確にする必要がある場合は、お知らせください。
前もって感謝します