当前位置:  开发笔记 > 运维 > 正文

在awk中解析管道分隔输入

如何解决《在awk中解析管道分隔输入》经验,为你挑选了1个好方法。

看过很多帖子都在问类似的问题.不能让它工作.

输入看起来像:

|

试着用awk解析.

从优秀的帖子尝试了很多变种:

FS = "^[\x00- ]*|[\x00- ]*[|][\x00- ]*|[\x00- ]*$";
FS = "^[\x00- ]*|[\x00- ]*\|[\x00- ]*|[\x00- ]*$";
FS = "^[\x00- ]*|[\x00- ]*\\|[\x00- ]*|[\x00- ]*$";

仍然无法使管道分隔符工作.

使用CentOS.

有帮助吗?



1> shellter..:
 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== nullchar?我不认为您将能够awk解析嵌入了空字符的文件.你可以准备好你的输入

 tr '\x00'   ' ' < file.txt > spacesForNulls.txt 

或者完全删除它们

tr -d '\x00' < file.txt > deletedNulls.txt

并消除你的正则表达式的那部分.但如上所述,有些awk人不支持正则表达式FS.并且,我不会tr非常使用这个技巧,你可能会发现它需要一个略有不同的表示法null,取决于你的版本tr.

我希望这有帮助.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有