Awk不要忽略空格

时间:2018-03-13 05:52:52

标签: perl awk

我的输入文件采用这种格式

         input
         input
         output
         super
         krish

这是每一行都以空格开头,并且在空格之后有一些东西。

现在,当我尝试" awk' {print $ 1}'输入"在unix中,它以下面的格式打印

$ awk '{print $1}' input
input
input
output
super
krish

但问题是当我尝试

awk '{if(\$1 == input) print \$1;}' <file>
系统中的

或使用反引号,它不会打印输出,也不会显示任何错误

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

如果您想要打印第一个字段中包含input字符串的行,则以下内容可以为您提供帮助。

awk '$1=="input"'  Input_file

输出如下:

     input
     input

如果您不想拥有空格并打印第一个字段为input的行,那么以下内容可能对您有帮助。

awk '$1=="input"{$1=$1;print}' Input_file

输出如下:

input
input

答案 1 :(得分:0)

您的初始代码中的问题是您在没有任何引号的情况下编写了input。这实际上意味着input是一个变量,在字符串操作的情况下默认被指定为空字符串,或者在数字操作的情况下被指定为数字零。

awk '{if($1 == input) print $1;}' <file>
因此,

等同于(在字符串比较的情况下)

awk '{if($1 == "") print $1;}' <file>

所以正确的答案是以下任何一个:

awk '{if ($1 == "input") print $1 }' <file>
awk '($1 == "input"){print $1}'      <file>
awk '$1~/^input$/{print $1}'         <file>

如果您的文件只有一列,并且您希望保留原始间距:

awk '{if ($1 == "input") print}'        <file>
awk '($1 == "input")'                   <file>
awk '$1~/^input$/'                      <file>
awk '/^[[:blank:]]*input[[:blank:]]*$/' <file>

注意:正则表达式操作/.../不需要引号。所以/input/有效。

注意:使用$转义\$符号不起作用。 \被假定为换行符,并且应该是该行的最后一个字符。所以原始代码中断了。