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

如何使用awk将控制台输出替换为基于某些状态的文本?,awk,grep,cut,sed,Awk,Grep,Cut,Sed,嗨,我想解析一些数据,对于某些值,在保存到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 (repla

嗨,我想解析一些数据,对于某些值,在保存到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。

最好同时给出输入和输出示例

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

最好同时给出输入和输出示例

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
GNU代码:

sed-r的s/\s+,(\s+,)\s+,(\s+,)\s+,(\s+,)\s+,()/\1\2\3\4/;s/1$/真/;s/0$/False/'文件

$cat文件 时间,11,姓名,杰克,成本,1300,已付,1 时间,13,姓名,时间,成本,1300,已付,0 $sed-r的s/\s+,(\s+,)\s+,(\s+,)\s+,(\s+,)\s+,()/\1\2\3\4/;s/1$/真/;s/0$/False/'文件 11,杰克,1300,真的 13,蒂姆,1300,假 GNU代码:

sed-r的s/\s+,(\s+,)\s+,(\s+,)\s+,(\s+,)\s+,()/\1\2\3\4/;s/1$/真/;s/0$/False/'文件

$cat文件 时间,11,姓名,杰克,成本,1300,已付,1 时间,13,姓名,时间,成本,1300,已付,0 $sed-r的s/\s+,(\s+,)\s+,(\s+,)\s+,(\s+,)\s+,()/\1\2\3\4/;s/1$/真/;s/0$/False/'文件 11,杰克,1300,真的 13,蒂姆,1300,假
供以后使用
cut
。您可以用逗号分隔多个字段:
-f2,4,6,7
@ahilsend谢谢您的提示!供以后使用
cut
。您可以用逗号分隔多个字段:
-f2,4,6,7
@ahilsend谢谢您的提示!OP也有一个(格式不良的)grep;您应该用一个模式来限制范围。@williampersell我假设那些标签(grep模式)存在于每一行中。这可能是真的,也可能不是真的。如果他在这方面有问题,我会帮助他。他的grep模式不会从他的输入中返回任何结果。@kent是的,这些模式存在于每一行中。感谢纯AWK实现。@ AmiHTA如果答案解决了你的问题,那么如何考虑接受它呢?OP也有(格式不好的)GRIP;您应该用一个模式来限制范围。@williampersell我假设那些标签(grep模式)存在于每一行中。这可能是真的,也可能不是真的。如果他在这方面有问题,我会帮助他。他的grep模式不会从他的输入中返回任何结果。@kent是的,这些模式存在于每一行中。谢谢AWHTA的纯实现。@如果你的回答解决了你的问题,那么如何考虑接受它呢?