我有一个包含数千个行和列的大文件,我想只保留 0,1,-1, 第2列以后并希望获得摆脱所有其他数字( 6 | 6,3 | 3,4 | 4,7 | 7等)。
输入:
1 55 -1 6|6 0 0 -1 1 2 0
1 56 -1 0 1 0 1 -1 -1 2 0
1 63 3|3 -1 0 0 1 -1 -1 2
1 73 -1 2 0 1 -1 -1 -1 0
1 75 -1 0 0 0 7|7 -1 -1 4|4 -1
1 80 -1 0 0 0 -1 5|5 -1 0 0
1 83 -1 1 1 0 -1 -1 -1 -1
输出:
1 56 -1 0 1 0 1 -1 -1 2 0
1 73 -1 2 0 1 -1 -1 -1 0
1 83 -1 1 1 0 -1 -1 -1 -1
我尝试了各种选项( sed,awk,grep ),但遗憾的是无法解决此问题,我们将非常感谢您的帮助。
答案 0 :(得分:3)
您也可以通过以下方式获得相同的输出:
grep -v '|' input_file
它适用于您的特定示例,但不如awk
解决方案强大。
答案 1 :(得分:2)
以下简单的awk
可能对您有帮助。
awk '!/[0-9]+\|[0-9]+/' Input_file
输出如下。
1 56 -1 0 1 0 1 -1 -1 2 0
1 73 -1 2 0 1 -1 -1 -1 0
1 83 -1 1 1 0 -1 -1 -1 -1
说明: !/[0-9]+\|[0-9]+/
检查条件,如果某行没有 数字|(管道)数字 < / strong>如果不是条件为TRUE则打印该行(awk
对条件方法起作用然后动作,所以这里当条件为TRUE时我没有提及任何动作,因此将发生当前行的默认动作打印。 )
解决方案第二: 解决方案sed
此处也是:
sed -n -E '/[0-9]+\|[0-9]+/d;p' Input_file
<强> 说明: 强>
-n
:停止sed
的打印,直到我们明确提到按p
选项打印任何行。
-E
:用于:
-e script, --expression=script add the script to the commands to be executed
/[0-9]+\|[0-9]+/d
:这是一个正则表达式,我在这里检查一行是否有 数字 然后使用d
选项删除/跳过那条线。
p
:如果在任何行中不满足先前条件,则打印该行,因为该行中不会有 数字 。