我的输入文件采用这种格式
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>
系统中的或使用反引号,它不会打印输出,也不会显示任何错误
任何人都可以帮助我吗?
答案 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/
有效。
注意:使用$
转义\$
符号不起作用。 \
被假定为换行符,并且应该是该行的最后一个字符。所以原始代码中断了。