Grep和Cut命令并分割字符串

时间:2012-11-22 14:31:27

标签: grep cut divide

我有一个grep命令,它提供以下字符串:

20121121001100 18 0 16 2 18

但我想修改此字符串以获取

20121121 001 18 0 16 2 18

以上提取的值如下:

for i in `ls -1 file.txt | sort`; do echo $i`
grep datetime $i | wc -l ``
grep abc $i | wc -l ``
grep def $i | wc -l ``
grep ghi $i | wc -l ``
grep jkl $i | wc -l ` ; done | cut -c9-500
使用

cut -c9-500是因为原始字符串是

的形式
datetime20121121001100 18 0 16 2 18

并剪切-c9-500返回

20121121001100 18 0 16 2 18

有人可以请我帮忙吗

20121121 001 18 0 16 2 18

(即从日期部分删除最后3位数字)

2 个答案:

答案 0 :(得分:1)

您希望/做的大部分内容都可以通过awk完成。但是你想要的最低限度:

for i in `ls -1 file.txt | sort`; do echo $i`
grep datetime $i | wc -l ``
grep abc $i | wc -l ``
grep def $i | wc -l ``
grep ghi $i | wc -l ``
grep jkl $i | wc -l ` ; done | cut -c9-500 | awk '{print substr($0,1,11) substr($0,15) }'

awk非常有能力进行文字处理。

编辑:我不确定你在做什么,但是,基本上这几乎是相同的:

awk 'FILENAME != oldfilename {oldfilename = FILENAME; dt = 0 ; a = 0; d = 0; g = 0; j = 0}
     /datetime/ {dt++}
     /abc/ {a++}
     /def/ {d++}
     /ghi/ {g++}
     /j/ {j++}
     END {print FILENAME, dt, a, d, g, j}' *

它更快,更少进程等...基本上awk处理文件,计算指定字符串的出现次数,以及何时完成文件(在最后一行之后)打印报告。

更改了规格:

for i in `ls -1 file.txt | sort`; do echo $i`
grep datetime $i | wc -l ``
grep abc $i | wc -l ``
grep def $i | wc -l ``
grep ghi $i | wc -l ``
grep jkl $i | wc -l ` ; done | cut -c9-500 | awk '{print substr($0,1,8) " " substr($0,9,4) substr($0,15) }'

答案 1 :(得分:0)

管道sed:

echo "20121121001100 18 0 16 2 18" | sed -r 's/^([0-9]+)[0-9][0-9][0-9] (.*)$/\1 \2/'

给出

20121121001 18 0 16 2 18