从具有多字符分隔符的文本文件中提取列,即“%$%”

时间:2017-12-08 06:18:58

标签: linux file awk command

我已经针对论坛上给出的问题尝试了不同的解决方案,但不适用于指定的分隔符%$%,我需要从包含200多列的文件中提取一个特定列。

我尝试了以下内容:

awk -F"%$%" '{print $1}' sample.txt > outfile.txt
awk 'gsub("%$%",":")' sample.txt > outfile.txt

2 个答案:

答案 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