假设我的文件只有一个包含100个字段的记录:
a1 a2 a3 a4 ... a100
其中所有a
都是数字。是否有任何有效的方法来挑选所有小于某个数字的数字,例如300
?
答案 0 :(得分:3)
您可以在awk
awk -v RS=" " '$0<300' file
echo "100 200 300 400" | awk -v RS=" " '$0<300'
100
200
echo "100 200 300 400" | awk -v RS=" " -v ORS=" " '$0<300'
100 200
或
echo "100 200 300 400 125" | awk '$0<300' RS=" " ORS=" "
100 200 125
为了彻底退出,我在最后添加了新行。领先于Ed
和Steve
:)
echo "100 200 300 400 150" | awk -v RS=" " -v ORS=" " '$0<300; END {print "\n"}'
100 200 150
如果在最后一个数字为真时没有您想要的额外空白行,请将\n
添加到RS
,但这会降低其可移植性。
echo "100 200 300 400 150" | awk -v RS=" |\n" -v ORS=" " '$0<300; END {print "\n"}'
100 200 150
答案 1 :(得分:3)
这个问题的难点在于产生一个解决方案,它不会在输出中添加前导或尾随空格和/或换行符,无论字段需要打印在哪个位置(某些字段在打印时会表现不同)第一个或最后一个字段)。
这样做:
$ echo "1 4 2 5 3 6" |
awk '{for (i=1;i<=NF;i++) if ($i<4) { printf "%s%s", ofs, $i; ofs=OFS } print "" }'
1 2 3
答案 2 :(得分:2)
awk '{for(i=1;i<=NF;i++) if($i<300) print $i;}' input.txt
输入:
100 200 300 400
输出:
100
200
要在一行中输出:
awk '{for(i=1;i<=NF;i++) if($i<300) {printf j==1?OFS$i:$i;j=1;}}' input.txt
答案 3 :(得分:2)