【发布时间】:2014-12-17 21:58:23
【问题描述】:
我有一个 CSV,我需要使用该 CSV 第一列中的键对其进行排序,然后我需要再次 awk 并通过第 2 列搜索并返回所有匹配的数据。
所以:我会用第一个键awk,它只会返回第二列的结果[所以只是单元格]。然后我会使用单元格内容 awk 并让它返回所有匹配的行。
我几乎没有bash/awk 脚本编写经验,所以请多多包涵。 :)
输入:
KEY1,TRACKINGKEY1,TRACKINGNUMBER1-1,PACKAGENUM1-1
,TRACKINGKEY1,TRACKINGNUMBER1-2,PACKAGENUM1-2
,TRACKINGKEY1,TRACKINGNUMBER1-3,PACKAGENUM1-3
,TRACKINGKEY1,TRACKINGNUMBER1-4,PACKAGENUM1-4
,TRACKINGKEY1,TRACKINGNUMBER1-5,PACKAGENUM1-5
KEY2,TRACKINGKEY2,TRACKINGNUMBER2-1,PACKAGENUM2-1
KEY3,TRACKINGKEY3,TRACKINGNUMBER3-1,PACKAGENUM3-1
,TRACKINGKEY3,TRACKINGNUMBER3-2,PACKAGENUM3-2
命令:
awk -v key=KEY1 -F' *,' '$1==key{f=1} $1 && $1!=key{f=0} f{print $3}' file
输出:
TRACKINGNUMBER1-1
TRACKINGNUMBER1-2
TRACKINGNUMBER1-3
TRACKINGNUMBER1-4
TRACKINGNUMBER1-5
这就是我尝试过的。我想awk,所以如果我搜索返回 trackingkey1 的 key1,然后 awk 使用 trackingkey 一个并输出每个完整的匹配行。
对不起,我应该更清楚。例如 - 如果我搜索 KEY3,我会 like 输出为:
KEY3,TRACKINGKEY3,TRACKINGNUMBER3-1,PACKAGENUM3-1
,TRACKINGKEY3,TRACKINGNUMBER3-2,PACKAGENUM3-2
所以我想要的是最初搜索 KEY3,它会返回 TRACKINGKEY3。然后我会搜索 TRACKINGKEY3,它会返回包含 TRACKINGKEY3 的每一行。
【问题讨论】:
-
到目前为止您尝试了什么?并显示您想要接收的输入和输出
-
您的代码似乎可以工作...有什么问题?