2014-12-01 118 views
1

如何使用如下的awk从文件的输出添加:如何添加““”的命令AWK

像:

cat /tmp/lista_table_vertical.txt | awk '{print "major_compact " $1}' 
major_compact game_activities 
major_compact interatividade_activities 
major_compact testeCompression 
major_compact testeCompression2 
major_compact testeSlowQuery 
major_compact users_algorithms 
major_compact users_algorithms2 

我想插入“””的开始,最后。 例如:

major_compact 'game_activities' 
major_compact 'interatividade_activities' 
major_compact 'testeCompression' 
major_compact 'testeCompression2' 
major_compact 'testeSlowQuery' 
major_compact 'users_algorithms' 
major_compact 'users_algorithms2' 

谢谢。

回答

5

一种解决方案是使用ASCII表示:

\047 

检查

man ascii 

最后:

awk '{print "major_compact \047" $1 "\047"}' /tmp/lista_table_vertical.txt 

另一个(也许很难记住&阅读)解决方案:

awk 'BEGIN{print "major_compact '\''" $1 "'\''"}' /tmp/lista_table_vertical.txt 
2

您可以使用:

awk -v sq="'" '{print "major_compact " sq $1 sq}' /tmp/lista_table_vertical.txt 

即通过单引号作为一个变量AWK,并用它使用变量名称的任何地方。

PS:您也不需要使用不必要的cat

+1

对我来说,这比使用'\ 047'更好,因为在这里你不需要记住单引号的数字。 – Jotne 2014-12-01 22:03:05

+0

@Jotne - 不,'\ 047'更好,因为您可以在任何需要单引号的地方使用它,例如里面的正则表达式常量。你可以写'/ \ 047foo \ 047 /',但是你不能写'/ sqfoosq /',你也不能写'$ 0〜sq“foo”sq',因为那样你需要额外处理''foo“ '作为计算正则表达式而不是正则表达式常量(例如,需要双重转义元字符)。在某些情况下它会变得不必要的笨拙,所以最好总是使用'\ 047'。 – 2014-12-01 22:31:38

+2

@jotne:你也可以使用与'\ 047'同样的按键次数的''''而不强迫你记住代码。 – rici 2014-12-02 01:15:36

2

如果你打算做其再次,最简单的做法是,如script.awk包含创建一个文件:

{ printf "major_compact '%s'\n", $1 } 

然后运行

awk -f script.awk /tmp/lista_table_vertical.txt 

这样做可以避免所有在shell命令行上转义引号的混乱。如果你只需输入一次,其他答案中的其中一位将会为你工作(但即使如此,这可能更容易第一次正确 - 如果你必须得到它是正确的,你必须以不止一次的形式或形式键入它)。