【发布时间】:2016-08-12 16:13:56
【问题描述】:
我有一个包含数字行的文件和一个文件:
2 20 3 file1.txt
93 21 42 file2.txt
52 10 12 file3.txt
如何使用 grep、awk 或其他命令只给我每行的第一个数字,以便它只显示:
2
93
52
谢谢。
【问题讨论】:
我有一个包含数字行的文件和一个文件:
2 20 3 file1.txt
93 21 42 file2.txt
52 10 12 file3.txt
如何使用 grep、awk 或其他命令只给我每行的第一个数字,以便它只显示:
2
93
52
谢谢。
【问题讨论】:
你可以用这个:
grep -oE '^\s*[0-9]+' filename
要处理前导空格,我目前没有选择。你最好接受 awk 的答案。
【讨论】:
[ ](尽管它确实有助于提高可读性),但考虑[ \t]* 或\s* 可能会更好,因为我们不需要'不知道文件格式。
您可以使用awk
awk '{print $1}' file
【讨论】:
有很多方法可以做到这一点。下面是一些(假设输入文件是gash.txt):
awk '{print $1}' gash.txt
或使用纯 bash:
while read num rest
do
echo $num
done < gash.txt
或使用“经典”sed:
sed 's/[ \t]*\([0-9]\{1,\}\).*/\1/' gash.txt
或将 ERE 与 sed 一起使用:
sed -E 's/[ \t]*([0-9]+).*/\1/' gash.txt
使用cut 是有问题的,因为我们不知道空格是空格还是制表符。
顺便说一下,如果要添加总行数:
awk '{total+=$1} END{print "Total:",total}' gash.txt
【讨论】:
wc,它将默认打印总计。