Bash Awk脚本,用于获取输入文件的选定第1列元素的链接

Bash Awk脚本,用于获取输入文件的选定第1列元素的链接,bash,for-loop,awk,grep,Bash,For Loop,Awk,Grep,我的数据集如下: 2,5 159,5 2,100 2,858 3,100 3,114 3,171 3,858 5,100 858,2 2,2456 4500,2 2456,3 5 100 858 2456 如果我从第1列中选择一个元素,例如2。我需要从第2列中获得所选元素的对应元素 我使用了: awk -F, '$1=="2" {print $2}' Sample.txt 这将返回元素2对应的第2列元素,如下所示: 2,5 159,5 2,100 2,858 3,100 3,114 3,1

我的数据集如下:

2,5
159,5
2,100
2,858
3,100
3,114
3,171
3,858
5,100
858,2
2,2456
4500,2
2456,3
5
100
858
2456
如果我从第1列中选择一个元素,例如2。我需要从第2列中获得所选元素的对应元素

我使用了:

awk -F, '$1=="2" {print $2}' Sample.txt
这将返回元素2对应的第2列元素,如下所示:

2,5
159,5
2,100
2,858
3,100
3,114
3,171
3,858
5,100
858,2
2,2456
4500,2
2456,3
5
100
858
2456
我希望下一次迭代对5执行检查并返回第2列元素。在这种情况下,5应该返回100,但它已经由2显示,所以我不需要100。同样的支票是100美元,一直到2456年。对于2456,它应该返回3,这是对应的第2列元素,并且是唯一的。我希望该迭代在3中继续相同的操作,并返回唯一的对应第2列唯一元素,直到没有第2列元素可返回为止

最终输出应如下所示:


5.
100
858
2456
3.
114
171

#3作为2456的第2列元素获得,114171作为3的第2列元素获得。因为,114和171没有任何其他唯一的第2列元素(请参阅上面的示例数据集)。迭代停止。这可以递归实现,因为我只能对第一个选择的元素执行此操作。

您的命令可以更改为:

awk -F, '$1==2 {print $2}' Sample.txt >> tmp.txt
5
100
858
2456

@JID没有,但它可能有助于OP理解awk,并了解如何将其用于他不容易理解的问题。@JID感谢您优化了说明。作为第一步,我希望对tmp.txt中生成的所有元素执行与您所示相同的操作,并将它们写入一个文件中。比如,用5代替2,一直到2456。@SujayShalawadi Jotne不是我:)你想看到什么输出?听起来你想要这个递归下降解析器的某个版本:。如果是这样,而您自己也不知道如何调整它以生成所需的输出,请编辑您的问题以显示所需的输出。