我一直在寻找一种方法来解决我的问题,但已经放弃了。我对脚本很陌生,所以请多多包涵。这就是我想要做的:
我有一个包含 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 列。
另一个棘手的问题是,其中一些 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
我的计划是将这些结果打印到一个文件中,然后从那里开始,但它没有用。这不是最优雅的解决方案,但就像我说的,我对此不是很精通。
你们的任何帮助将不胜感激。如果您需要另一个示例或让我澄清事情,请告诉我。
提前致谢