我已经针对论坛上给出的问题尝试了不同的解决方案,但不适用于指定的分隔符%$%
,我需要从包含200多列的文件中提取一个特定列。
我尝试了以下内容:
awk -F"%$%" '{print $1}' sample.txt > outfile.txt
awk 'gsub("%$%",":")' sample.txt > outfile.txt
答案 0 :(得分:1)
符号$
是正则表达式中的特殊字符,因此您需要使用\
来转义它,这也是字符串文字的特殊字符,因此需要再次转义
所以,最后我们有:
$ cat sample
ghkjlj;lk%$%23e;k32poek%$%eqdje2oijd%$%xrgtdy5h
$ awk -F'%\\$%' '{print $1}' sample
ghkjlj;lk
答案 1 :(得分:1)
无论是-F (FS)
还是gsub()
,它都需要一个正则表达式,你需要使用字符类或者逃避具有特殊含义的字符,例如你的例子中的$
。
kent$ awk -F'%[$]%' '{print $1}' <<<"foo%$%bar%$%blah"
foo
如果您只想更改分隔符,可以使用gsub
或使用OFS
:
kent$ awk -F'%[$]%' -v OFS=":" '$1=$1' <<<"foo%$%bar%$%blah"
foo:bar:blah
kent$ awk 'gsub(/%[$]%/,":")+1' <<<"foo%$%bar%$%blah"
foo:bar:blah