如何使用awk基于某些状态将控制台输出替换为文本?

时间:2013-07-24 18:55:26

标签: awk grep cut

您好我想解析一些数据,并且在保存为CSV之前将某些数据替换为字符串

Sample Lines
============
Time,11,Name,Jack,Cost,1300,Paid,1
Time,13,Name,Tim,Cost,1300,Paid,0

grep & cut (&awk)
============
grep -i "Time,\d+,Name,\w+,Cost,\d+,Paid" | cut -d, -f2 -f4 -f6 -f7 | awk (replace f7 with True if 1 or replace f7 with False if 0)

由于

编辑:修正了我的grep。

2 个答案:

答案 0 :(得分:3)

给出输入和输出示例总是好的。

awk可以单独做,没有grep和cut。试试这一行:

awk -F, -v OFS="," '{$8=$8==1?"True":"False";print $2,$4,$6,$8}' file

使用您的数据,awk行给出:

11,Jack,1300,True
13,Tim,1300,False

答案 1 :(得分:0)

GNU代码

sed -r 's/\S+,(\S+,)\S+,(\S+,)\S+,(\S+,)\S+,(.)/\1\2\3\4/;s/1$/True/;s/0$/False/' file

$ cat file
Time,11,Name,Jack,Cost,1300,Paid,1
Time,13,Name,Tim,Cost,1300,Paid,0

$ sed -r 's/\S+,(\S+,)\S+,(\S+,)\S+,(\S+,)\S+,(.)/\1\2\3\4/;s/1$/True/;s/0$/False/' file
11,Jack,1300,True
13,Tim,1300,False