我有一个包含数千行的文件。我想打印不包含句点的行。
awk '{print$2}' file.txt | head
我用它来打印我感兴趣的列,第2列(该文件只有两列)。 我已经删除了头部然后
awk '{print$2}' file.txt | grep -v "." | head
但是我只得到空行而不是任何预期的实际值,我认为它包含行之间的空格但我不确定。
是否有替代命令?
正如吉姆所说,我做了 -
awk '{print$2}' file.txt | grep -v "\." | head
然而,线的数量比以前更大,这是预期的吗?另外,我的输出是一个数字列表,但它们之间有空格(垂直),这是正常的吗?
下面的file.txt示例 -
120.4 3
270.3 7.9
400.8 3.9
200.2 4
100.2 8.7
300.2 3.4
102.3 6
49.0 2.3
38.0 1.2
因此预期(和正确)输出将是3行,因为第2列中有3个值没有句点:
$ awk '{print$2}' file.txt | grep -v "\." | head
3
4
6
但是,当运行上面的代码时,我得到5,这也是我想的行之间的空格:
$ awk '{print$2}' file.txt | grep -v "\." | head
3
4
6
答案 0 :(得分:1)
如果您已经在使用grep
awk
这将在第二列不包含点的每一行打印第二列:
awk '$2 !~ /\./ {print $2}'
但是你也想跳过空行,或者第二列不为空的行。所以也只是测试一下:
awk '$2 != "" && $2 !~ /\./ {print $2}'
(更有趣的版本是awk '$2 ~ /./ && $2 !~ /\./ {print $2}'
)
正如你所说,grep -v "."
只给你空行。这是因为点表示“任何字符”,而-v
表示打印的唯一行是那些不包含任何字符的行。
答案 1 :(得分:0)
grep将点解释为正则表达式元字符(点将匹配任何单个字符)。尝试使用反斜杠转义它:
awk '{print$2}' file.txt | grep -v "\." | head
答案 2 :(得分:0)
如果我理解得很好,你可以试试这个sed
sed ':A;N;${s/.*/&\n/};/\n$/!bA;s/\n/ /g;s/\([^ ]*\.[^ ]* \)//g' file.txt
output
3
4
6