在文件的第一个字段中添加双引号

时间:2014-11-05 10:14:40

标签: shell awk sed

我有一个这样的文件,其中字段是制表符分隔的:

http://article.wn.com/view/wnat51e64f5c0a06e3e18f45e66d5185fc04/                                                        0       0       0       0       0       0       0       0       0       0       0       0  
http://newsok.com/ward-blanks-bruins-in-hurricanes-3-0-win./article/feed/217313?custom_click=rss                        0       0       0       0       0       0       0       0       0       0       0       0  
http://www.neurosoftware.ro/finance/insurance/stock-market/zoom-ctch-wvvi-hiru-couv-stock-alerts-from-stock-pr-com/     0       0       0       0       0       0       0       0       0       0       0       0  

我想在文件的第一列添加双引号,如

"http://article.wn.com/view/wnat51e64f5c0a06e3e18f45e66d5185fc04/"                                                        0       0       0       0       0       0       0       0       0       0       0       0  
"http://newsok.com/ward-blanks-bruins-in-hurricanes-3-0-win./article/feed/217313?custom_click=rss"                        0       0       0       0       0       0       0       0       0       0       0       0  
"http://www.neurosoftware.ro/finance/insurance/stock-market/zoom-ctch-wvvi-hiru-couv-stock-alerts-from-stock-pr-com/"     0       0       0       0       0       0       0       0       0       0       0       0  

我试过了:

awk -F \t '{sub($1, "\"&\""); print}' file

我得到了这样的结果:

"h"ttp://article.wn.com/view/wnat51e64f5c0a06e3e18f45e66d5185fc04/                                                        0       0       0       0       0       0       0       0       0       0       0       0  
"h"ttp://newsok.com/ward-blanks-bruins-in-hurricanes-3-0-win./article/feed/217313?custom_click=rss                        0       0       0       0       0       0       0       0       0       0       0       0  
"h"ttp://www.neurosoftware.ro/finance/insurance/stock-market/zoom-ctch-wvvi-hiru-couv-stock-alerts-from-stock-pr-com/     0       0       0       0       0       0       0       0       0       0       0       0 

有什么建议可以解决这个问题吗?

6 个答案:

答案 0 :(得分:1)

使用sed

可以轻松完成此操作
sed -r 's/^([^\t]+)/"\1"/' file

它会捕获标签前的第一个文本块(+以匹配至少一个字符,感谢评论中的Jidder!)并将其打印回来,并用双引号括起来。

此外,如果您使用-F"\t"

,您的方法会很好
awk -F"\t" '{sub($1, "\"&\""); print}' file

虽然这种方法可能更好(感谢评论中的anubhava!)

awk 'BEGIN{FS=OFS="\t"} NF{$1="\"" $1 "\""}1' file

这会将输入和输出字段分隔符设置为选项卡。然后,如果有一些字段(NF至少有一个,即没有空行),它会在第一个字段周围添加引号。然后,1执行默认的awk操作:打印行。

答案 1 :(得分:1)

使用awk轻松完成

awk '$1="\""$1"\""' OFS="\t" file

如果有空行

awk 'NF&&$1="\""$1"\""' OFS="\t" file

答案 2 :(得分:1)

使用gensub中的gawk函数的另一种方式:

gawk '{print gensub(/^([^[:space:]]+)/, "\"&\"", "")}' infile

注意:不必担心FSOFS值。

答案 3 :(得分:0)

echo \t
t

标签字符的bash文字是$'\t'

答案 4 :(得分:0)

使用awk:

awk -v OFS="\t" '{$1= "\""$1"\""; print}' file

答案 5 :(得分:0)

这可能适合你(GNU sed):

sed 's/\S\+/"&"/' file

用双引号括起一个或多个非空格。