我有一个这样的文件,其中字段是制表符分隔的:
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
有什么建议可以解决这个问题吗?
答案 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
注意:不必担心FS
和OFS
值。
答案 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
用双引号括起一个或多个非空格。