我想剪切一行的字符n-N,但只有当行以某些字符开头时,否则我想打印整行。
简化文件示例:
John
123456987123
Mark
123546792019
我想创建两个新文件,一个包含FIRST 6个数字,另一个包含最后6个数字,但仍然包含标题,所以
John
123456
Mark
123546
John
987123
Mark
792019
我可以告诉grep cut只剪切字符串是否匹配,但是否则给出整个文件?如果条件满足或以其他方式打印整行,那么什么样的awk命令可以剪切线?
由于
答案 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