首页 > 解决方案 > 通过 bash 打印 tsv 文件列中的所有值对

问题描述

我想编写一个小的 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

我也对其他工具持开放态度。

标签: linuxbashloopsawk

解决方案


这是你想要的吗?

awk 'NR>1 {print $4; next; print $4}'

推荐阅读