【发布时间】:2018-05-22 08:54:43
【问题描述】:
对于论坛上给出的问题,我尝试了不同的解决方案,但不适用于指定的分隔符%$%,我需要从包含 200 多列的文件中提取一个特定的列。
我尝试了以下方法:
awk -F"%$%" '{print $1}' sample.txt > outfile.txt
awk 'gsub("%$%",":")' sample.txt > outfile.txt
【问题讨论】:
对于论坛上给出的问题,我尝试了不同的解决方案,但不适用于指定的分隔符%$%,我需要从包含 200 多列的文件中提取一个特定的列。
我尝试了以下方法:
awk -F"%$%" '{print $1}' sample.txt > outfile.txt
awk 'gsub("%$%",":")' sample.txt > outfile.txt
【问题讨论】:
符号$是正则表达式中的特殊字符,所以需要用\转义,这也是字符串文字的特殊字符,所以需要再次转义。
所以,我们终于有了:
$ cat sample
ghkjlj;lk%$%23e;k32poek%$%eqdje2oijd%$%xrgtdy5h
$ awk -F'%\\$%' '{print $1}' sample
ghkjlj;lk
【讨论】:
无论-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
【讨论】: