输入文件:salal.txt
1 rob hr 10000
2 charls it 20000
4 kk Fin 30000
5 km it 30000
6 kl it 30000
7 mark hr 10000
8 kc it 30000
9 dc fin 40000
10 mn hr 40000
3 abi it 20000
目标:找到薪水第二高的所有记录,其中4rthcolumn是薪水(空格记录)
我运行了两个类似的命令,但是输出却完全不同,我想念的是什么?
Command1:
sort -nr -k4,4 salary.txt | awk '!a[$4]{a[$4]=$4;t++}t==2'
输出:
8 kc it 30000
6 kl it 30000
5 km it 30000
4 kk Fin 30000
command2:
cat salary.txt | sort -nr -k4,4 | awk '!a[$4]{a[$4]=$4;t++}t==2' salary.txt
输出:
2 charls it 20000
这两个命令的区别仅在于读取salal.txt的方式,而是输出完全不同的原因
答案 0 :(得分:2)
因为第二种格式awk
将直接从salary.txt
读取-您将其作为输入文件的名称传递-忽略了sort
的传递给stdin的输出。省略command2中的最后一个salary.txt
,您将看到输出与command1的输出匹配。实际上,sort
的行为和形式相同:
cat salary.txt | sort
echo "string that will be ignored" | sort salary.txt
将产生完全相同的输出。
答案 1 :(得分:1)
在第二条命令中没有,awk不会从stdin中读取。如果您将其更改为
cat salary.txt | sort -nr -k4,4 | awk '!a[$4]{a[$4]=$4;t++}t==2'
您得到相同的结果