【问题标题】:Awk scripting to obtain links for a chosen column 1 elements for an input file用于获取输入文件的所选第 1 列元素的链接的 awk 脚本
【发布时间】:2015-06-16 01:02:02
【问题描述】:

我有一个数据集如下:

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

如果我从第 1 列中选择一个元素,例如第 2 列。我需要从第 2 列中获取所选元素的对应元素。

我用过:

awk -F, '$1=="2" {print $2}' Sample.txt

返回元素2对应的第2列元素,如下:

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 is got as a column 2 element of 2456 and 114,171 are got as column 2 element of 3. Since, 114 and 171 don't have any further unique column 2 elements (Refer the sample data set above). The iteration stops. Can this be recursively achieved as I am able to do it only for the first chosen element.

【问题讨论】:

  • 你想看什么输出?
  • 听起来你想要这个递归下降解析器的某个版本:stackoverflow.com/a/25085230/1745001。如果是这样,并且您无法弄清楚如何自己调整以产生所需的输出,请编辑您的问题以显示所需的输出。

标签: bash for-loop awk grep


【解决方案1】:

你的命令可以改成:

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

【讨论】:

  • @JID 不是,但它可以帮助 OP 理解 awk 并了解如何将其用于他不容易理解的问题。
  • @JID 感谢您优化指令。作为第一步,我希望对 tmp.txt 中生成的所有元素执行与您显示的相同的操作,并将它们写入单个文件中。就像不是 2 而是取 5 并一直持续到 2456 年。
  • @SujayShalawadi Jotne 不是我 :)
猜你喜欢
  • 2019-08-11
  • 2017-04-23
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多