Shell awk内的管道是如何工作的(通过保留标题进行排序)
下面的命令输出文件的头,并在头之后对记录进行排序。但是它是如何工作的呢?有人能解释一下这个命令吗Shell awk内的管道是如何工作的(通过保留标题进行排序),shell,awk,Shell,Awk,下面的命令输出文件的头,并在头之后对记录进行排序。但是它是如何工作的呢?有人能解释一下这个命令吗 awk 'NR == 1; NR > 1 {print $0 | "sort -k3"}' 请你把下面的内容再看一遍(仅供解释)。要了解有关awk的更多概念,我建议您通过 |是一个-在本例中是管道到命令排序-k3。您还可以使用重定向来写入文件,方法是使用: awk 'NR == 1; NR > 1 {print $0 > "output.txt&qu
awk 'NR == 1; NR > 1 {print $0 | "sort -k3"}'
请你把下面的内容再看一遍(仅供解释)。要了解有关
awk
的更多概念,我建议您通过
|
是一个-在本例中是管道到命令排序-k3
。您还可以使用重定向来写入文件,方法是使用
:
awk 'NR == 1; NR > 1 {print $0 > "output.txt"}'
awk 'NR == 1; NR > 1 {print $0 >> "output.txt"}'
或使用>>
附加到文件:
awk 'NR == 1; NR > 1 {print $0 > "output.txt"}'
awk 'NR == 1; NR > 1 {print $0 >> "output.txt"}'
第一个将写入文件
output.txt
除第一行以外的所有行,第二个将追加到output.txt
除第一行以外的所有行。了解awk命令:
总体而言,awk程序是由(pattern){action}
对构建的,该对统计如果pattern
返回非零值,则执行action
。一个人不一定要同时写两个。如果省略了模式
,则默认为1
;如果省略了操作
,则默认为打印$0
查看相关命令时:
awk 'NR == 1; NR > 1 {print $0 | "sort -k3"}'
我们注意到有两个动作模式对。第一个读取NR==1
,并声明如果我们正在处理第一条记录(模式),则打印该记录(默认操作)。第二个有点棘手。模式是明确的,另一方面,行动需要一些解释
awk知道4条可以重定向输出的输出语句。其中一个是expression | cmd
。它本质上意味着awk将把输出写入一个流,该流通过管道作为命令cmd
的输入。它将继续向该流写入输出,直到使用close(cmd)
语句或简单地终止awk显式关闭该流
对于OP,该操作读取{print$0 |“sort-k3”}
,这意味着它将把所有记录$0
打印到一个流中,该流用作shell命令sort-k3
的输入。只有当程序完成时,排序
才会写入其输出
重述:OP的命令将打印文件的第一行,并根据第三列对连续行进行排序
替代解决方案:
使用GNU awk,最好执行以下操作:
awk '(FNR==1);{a[$3]=$0}
END{PROCINFO["sorted_in"]="@ind_str_asc"
for(i in a) print a[i]
}' file
cat file | (read -r; printf "%s\n" "$REPLY"; sort -k3)
使用纯shell时,最好执行以下操作:
awk '(FNR==1);{a[$3]=$0}
END{PROCINFO["sorted_in"]="@ind_str_asc"
for(i in a) print a[i]
}' file
cat file | (read -r; printf "%s\n" "$REPLY"; sort -k3)
相关问题:
awk
使用条件的方法
然后操作
因为这里没有提到任何操作,所以默认情况下会打印当前行,干杯。非常感谢您的提示和清晰explanation@VipulBajaj,欢迎您的光临,并祝您学习愉快。很好地使用了内置的shell命令awk