如果满足条件,则从某些行切割字符,否则打印整行

时间:2011-08-08 19:19:58

标签: awk grep

我想剪切一行的字符n-N,但只有当行以某些字符开头时,否则我想打印整行。

简化文件示例:

John
123456987123
Mark
123546792019

我想创建两个新文件,一个包含FIRST 6个数字,另一个包含最后6个数字,但仍然包含标题,所以

John
123456
Mark
123546

John
987123
Mark
792019

我可以告诉grep cut只剪切字符串是否匹配,但是否则给出整个文件?如果条件满足或以其他方式打印整行,那么什么样的awk命令可以剪切线?

由于

3 个答案:

答案 0 :(得分:2)

Grep只能grep,而不能削减。

awk '/^[0-9]/{print(substr($0,0,6));next;}
        # Fall through here in case of no match
        {print}' inputfile

答案 1 :(得分:1)

您可以在单个sed脚本中生成2个文件,只读取输入文件一次。将下面的内容放在文本文件中,并使用sed -f script_file input_file运行。它将生成f1和f2文件并输出输入文件。

/^[^0-9]/{
w f1
w f2
}
/^[0-9]/{
h
s/^\(.\{6\}\).*/\1/
w f1
g
s/^.\{6\}//
w f2
g}

答案 2 :(得分:0)

grep应该没问题:

grep -E -o '^[0-9]{6}|^[^0-9].*' input > first.txt
grep -E -o '[0-9]{6}$|^[^0-9].*' input > last.txt