我有一个csv文件,其中数据以如下方式存储,其中有一个空格作为分隔字符:
181.221.132.87 2020-03-01T06:22:47.775Z "GET / HTTP/1.1" 200 1 "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"我必须打印第5列(在本例中值为“1”的列)值大于5的所有行。问题是,我受unix命令的限制,并且被告知我不能使用awk或sed。任何不能用提供给我们的命令列表完成的事情都必须用自定义C程序来实现,但是重点是尽可能少地使用自定义程序。
我可以使用的Unix命令如下: cat、curl、削减、echo、exec、egrep、grep头、ls粘贴、printf、排序、尾、tr、uniq、wc。
对不起,如果以前问过类似的问题,但我找不到一个不包括awk或sed的起点
编辑:
{ egrep " "[5-9]{1}" " file.csv; egrep " "[0-9]{2}" "file.csv; }上面的命令似乎提供了正确的输出,但是我觉得有一个更好的解决方案。
发布于 2020-04-25 13:48:06
这就是我想出来的!
egrep --color '^(("[^"]*"|[^"]\S*)\s+){4}([1-9][0-9]|[6-9])' file.csv解释
^是line("[^"]*"|[^"]\S*)\s+)的起点,是一个单元,它由2个possibilities:组成
- `"[^"]*"` This is a string cell, surrounded by quotes, and which cannot contain any quotes in its body
- `[^"]\S*)\s+` This is a normal cell, which can contain anything except white spaces (`\s` is a white space, `\S` is a non white space)
{4}我们重复4次,对于前4 cells([1-9][0-9]|[6-9]),这是你的数字,再一次由2种可能性组成:[1-9][0-9],它比10[6-9]更多,比5更多
至于彩旗,它..。将颜色添加到命令中,在创建regex时,可以更容易地获得匹配内容的可视化表示:

在某些系统中,默认情况下存在--color,因此您可能看不到其中的区别。
发布于 2020-04-25 14:56:11
无grep
cat log| while read line
do
v=`echo $line | cut -d'"' --output-delimiter=' ' -f1,3 | tr -s ' '|cut -f4 -d' ' `
if [ "$v" -gt 5 ]
then
echo $line
fi
done用while read line逐行读取文件
使用cut奇数拆分的字段中没有“偶数”
cut -d'"' --output-delimiter=' ' -f1,3181.221.132.87 2020-03-01T06:22:47.775Z 200 1
用tr移除双空格
cut -d'"' --output-delimiter=' ' -f1,3 | tr -s ' '给出
181.221.132.87 2020-03-01T06:22:47.775Z 200 1在pos 4点得到切分
cut -d'"' --output-delimiter=' ' -f1,3 | tr -s ' '|cut -f4 -d' '给出
1然后在纯bash [ "$v" -gt 5 ]中检查5
https://stackoverflow.com/questions/61426132
复制相似问题