如何根据行字段为每行添加前缀

时间:2014-05-22 15:34:34

标签: linux bash shell awk sed

我有以下文件

aaa1.bbb1.ccc toto
aaa1.bbb1.ddd. titi
aaa2.bbb2.ccc
aaa2.bbb2.eee tza
aaa2.bbb2.ddd.

我想在每行的开头添加一个字符串。这个字符串将是" OK"如果该行的第一个字段以.结束,字符串将为" NOK"如果该行的第一个字段未以.

结束

字段的分隔符是空格

基于上面的例子,命令的输出将是:

NOK aaa1.bbb1.ccc toto
OK aaa1.bbb1.ddd. titi
NOK aaa2.bbb2.ccc
NOK aaa2.bbb2.eee aza
OK aaa2.bbb2.ddd.

我怎么能这样做?

4 个答案:

答案 0 :(得分:5)

awk '{print ($1 ~ /\.$/ ? "OK" : "NOK"), $0}' file

答案 1 :(得分:1)

这样做:

awk '{ print $1 ~ /\.$/ ? "OK" : "NOK", $0 }'

我们说:对于每一行,如果第一个字段以句点结束,则打印OK,否则为NOK,然后打印整行。

答案 2 :(得分:0)

通过sed

sed '/.*\. .*/ s/^\(.*\)$/OK \1/g; /\.$/ s/^\(.*\)$/OK \1/g' file | sed '/^[^O]/ s/^\(.*\)$/NOK \1/g'

输出:

NOK aaa1.bbb1.ccc toto
OK aaa1.bbb1.ddd. titi
NOK aaa2.bbb2.ccc
NOK aaa2.bbb2.eee tza
OK aaa2.bbb2.ddd.

答案 3 :(得分:0)

sed -r '/^[^ ]\{1,\}\.\( \|$\)/ {s//OK &/;b;};s/^/NOK /' YourFile

假设空间只是空格char(如果没有用[:space:][:blank:]替换空格字符,但有时不接受系统上的值)