我想结合这两个命令并想要调用单个命令
在第一个命令中,我将第四列x.csv(Separator)文件存储在z.csv文件中。
awk -F, '{print $4}' x.CSV > z.csv
在第二个命令中,我想找出z.csv(Separator-space)文件的唯一第一列值。
awk -F\ '{print $1}' z.csv|sort|uniq
我想在单个命令中组合这两个命令,我该怎么做?
答案 0 :(得分:5)
假设实际需要z.csv
的内容,而不仅仅是您当前实施程序的方式,那么您可以使用:
awk -F, '{ print $4 > "z.csv"
split($4, f, " ")
f4[f[1]] = 1
}
END { for (i in f4) print i }' x.CSV
split
函数在空格上打破字段4,(关联)数组f4
记录键值。最后的循环打印出未分类的不同值。如果需要对它们进行排序,可以使用GNU awk
的内置排序函数,或者(如果没有内置排序函数的awk
)在{{{ 1}},或将输出传递给awk
。
使用GNU sort
,您可以将awk
块替换为:
END
如果您不想要 END { asorti(f4); for (i in f4) print f4[i] }
文件,那么(a)您可以首先使用管道,(b)您只需删除z.csv
行。
答案 1 :(得分:4)
awk '{split($4,b," "); a[b[1]]=1} END { for( i in a) print i }' FS=, x.CSV
这不会对数据进行排序,但是如果您确实希望对数据进行排序或仅需要获取唯一条目,则不清楚。如果您确实希望对其进行排序,请将其传递给sort
。
答案 2 :(得分:4)
将第一个awk
的输出传输到第二个awk
:
awk -F, '{print $4}' x.CSV | awk -F\ '{print $1}' |sort|uniq
或者,正如Avinash Raj建议的那样,
awk -F, '{print $4}' x.CSV | awk -F\ '{print $1}' | sort -u