我想结合这两个命令,并希望调用单个命令
在第一个命令中,我将第四列x.csv(Separator)文件存储在z.csv文件中.
awk -F, '{print $4}' x.CSV > z.csv
Run Code Online (Sandbox Code Playgroud)
在第二个命令中,我想找出z.csv(Separator-space)文件的唯一第一列值.
awk -F\ '{print $1}' z.csv|sort|uniq
Run Code Online (Sandbox Code Playgroud)
我想在单个命令中组合这两个命令,我该怎么做?
将第一个的输出通过管道awk传输到第二个awk:
awk -F, '{print $4}' x.CSV | awk -F\ '{print $1}' |sort|uniq
Run Code Online (Sandbox Code Playgroud)
或者,正如 Avinash Raj 建议的那样,
awk -F, '{print $4}' x.CSV | awk -F\ '{print $1}' | sort -u
Run Code Online (Sandbox Code Playgroud)
假设z.csv实际需要的内容,而不仅仅是您当前实现程序的方式的人工制品,那么您可以使用:
awk -F, '{ print $4 > "z.csv"
split($4, f, " ")
f4[f[1]] = 1
}
END { for (i in f4) print i }' x.CSV
Run Code Online (Sandbox Code Playgroud)
该split函数在空格上打破字段4,(关联)数组f4记录键值.最后的循环打印出未分类的不同值.如果你需要对它们进行排序,你可以使用GNU awk的内置排序函数,或者(如果你没有awk内置的排序函数)编写你自己的awk,或者输出到输出sort.
使用GNU awk,您可以使用以下代码替换END块:
END { asorti(f4); for (i in f4) print f4[i] }
Run Code Online (Sandbox Code Playgroud)
如果你不想要z.csv文件,那么(a)你可以在第一时间使用管道,(b)你可以简单地删除该print $4 > "z.csv"行.