看过很多帖子都在问类似的问题.不能让它工作.
输入看起来像:
|
试着用awk解析.
从优秀的帖子尝试了很多变种:
FS = "^[\x00- ]*|[\x00- ]*[|][\x00- ]*|[\x00- ]*$"; FS = "^[\x00- ]*|[\x00- ]*\|[\x00- ]*|[\x00- ]*$"; FS = "^[\x00- ]*|[\x00- ]*\\|[\x00- ]*|[\x00- ]*$";
仍然无法使管道分隔符工作.
使用CentOS.
有帮助吗?
echo "field one has spaces | field two has spaces" \ | awk ' BEGIN { FS="|" } { print $2 print $1 # or what ever you want }' #output field two has spaces field one has spaces
你也可以减少这个
awk -F'|' { print $2 print $1 }'
编辑
此外,并非所有awks都可以为该FS
值使用多字符正则表达式.
Edit2
不知怎的,我最初错过了这个,但是我看到你正试图\x00
在char前后的char类中加入|
.我假设你的意思是\x00
== null
char?我不认为您将能够awk
解析嵌入了空字符的文件.你可以准备好你的输入
tr '\x00' ' ' < file.txt > spacesForNulls.txt
或者完全删除它们
tr -d '\x00' < file.txt > deletedNulls.txt
并消除你的正则表达式的那部分.但如上所述,有些awk
人不支持正则表达式FS
.并且,我不会tr
非常使用这个技巧,你可能会发现它需要一个略有不同的表示法null
,取决于你的版本tr
.
我希望这有帮助.