【发布时间】:2020-04-07 09:28:32
【问题描述】:
我想编写一个小的 shell 脚本来让自己更轻松地完成标记任务。唉,我仍然缺乏这样做的技能。
我有一个如下所示的 news.tsv 文件:
id foo bar text
1 a b lorem
2 c d ipsum
...
50 e f muspi
文本列中的实际条目是冗长的新闻文章。我想一次打印 2 个这样的文本,直到列中所有可能的对都打印完。
在寻找解决方案时,我发现 awk 可能是完成这项任务的正确工具。我知道如何在文本列中打印两个特定条目,例如,
awk -F '\t' 'NR==2 {print $4} NR==3 {print $4}' news.tsv
将打印 lorem 和 ipsum。为了获得所有对,我想我需要一个嵌套的 for 循环,但我无法用 awk 实现它。
我的意大利面尝试看起来像这样:
awk -F '\t' '{for (i=0; i<50; i++){for (j=i+1; j<50; j++) if(i!=j){NR==i {print $4} NR==j {print $4}}}}' news.tsv
我也愿意使用其他工具。
【问题讨论】:
-
你的“意大利面条代码”能做到你想要的吗?
-
text可以包含tabs吗?你说长篇文章——你有什么保证文本中没有其他标签? -
2 of these texts at once, until all possible pairs in the column have been printed这是什么意思?你能发布你期望得到的示例输出吗? -
你能得到想要的输出吗?
-
输出对的顺序重要吗?我的意思是,如果您打印
foo bar,那么您是否也应该打印bar foo。