保留所需数据并删除不需要的数据
Keep desired data and remove unwanted one
我有一个包含数千行和几列的大文件,我只想保留 0, 1, -1, 2 从 第 2 列开始 并希望删除所有其他数字 (6|6, 3|3, 4|4,7|7, e.t.c.).
输入:
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),但不幸的是无法解决这个问题,非常感谢您的帮助。
下面这个简单的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]+/
如果一行没有 [=38=,则检查这里的条件]digit|(pipe)digit 如果条件不为真则打印该行(awk
在条件方法和操作上工作,所以这里当条件为真时我是没有提及任何操作,因此将发生当前行的默认操作打印。)
解决方案 2: 解决方案 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
: 是一个正则表达式,我在这里检查一行是否有 digit|digit 然后使用 d
选项到 delete/skip 该行。
p
:如果任何一行都不满足先前的条件,则打印该行,因为它不会有 digit|digit行。
您也可以通过以下方式获得相同的输出:
grep -v '|' input_file
它适用于您的特定示例,但不如 awk
解决方案强大。
我有一个包含数千行和几列的大文件,我只想保留 0, 1, -1, 2 从 第 2 列开始 并希望删除所有其他数字 (6|6, 3|3, 4|4,7|7, e.t.c.).
输入:
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),但不幸的是无法解决这个问题,非常感谢您的帮助。
下面这个简单的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]+/
如果一行没有 [=38=,则检查这里的条件]digit|(pipe)digit 如果条件不为真则打印该行(awk
在条件方法和操作上工作,所以这里当条件为真时我是没有提及任何操作,因此将发生当前行的默认操作打印。)
解决方案 2: 解决方案 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
: 是一个正则表达式,我在这里检查一行是否有 digit|digit 然后使用 d
选项到 delete/skip 该行。
p
:如果任何一行都不满足先前的条件,则打印该行,因为它不会有 digit|digit行。
您也可以通过以下方式获得相同的输出:
grep -v '|' input_file
它适用于您的特定示例,但不如 awk
解决方案强大。