需要了解shell awk代码

时间:2012-08-02 11:40:39

标签: shell printing awk

我绊倒了这段代码,我试图通过分隔符解析文件“;”并将其保存到其他新文件中。但现在它将原始内容保存到新文件中而不会分离。

cat $file | awk 'BEGIN {FS=";"}{ print  > "final.txt"}END{ print "parsed now..."}'

但它给了我原始文件内容。我想,print将打印由awk处理的文件的所有列。

有人可以帮帮我吗?

非常感谢

2 个答案:

答案 0 :(得分:0)

如果我理解你的话,那么问题就是你没有输出“;”应该用“”(标准的OFS)代替? 如果这就是问题,为什么不这样做

sed 's/;/ /g' $file

无论如何 - awk中的AFAIK print表示print $0,其中$0只是输入行。如果该行中没有明确更改的字段$0根本没有更新。我的解决方法通常是进行伪更新$1=$1以强制更新$0。也许有一种“更清洁”的方式......

cat $file | awk 'BEGIN {FS=";"}{$1=$1;print  > "final.txt"}END{ print "parsed now..."}'

修改

awk -F";" '{print $4}' $file >final.txt

答案 1 :(得分:0)

打印将默认打印$ 0,这是完整的行。 所以无论你得到什么都是正确的。

我知道你到底需要什么? 你需要拆除分隔符吗?

第4栏可以打印如下:

awk 'BEGIN {FS=";"}{ print $4 > "final.txt"}END{ print "parsed now..."}' $file