在打印字段时关闭awk

时间:2016-12-29 06:34:55

标签: bash awk

我无休止地搜索,找不到任何可以解决看似简单问题的事情。

我有以下行读取csv文件并只使用这些字段来创建新字符串。

输入是一组简单的2列整数:

1234,1
5678,2
1357,5
2468,4

每个的预期输出应该是"评级应该是1,id应该是1234"对于每一行。

awk -F "," '{print "rating should be "$2" and id should be "$1}' $1 >> $FILENAME

但这是我得到的输出:

 and id should be 635277
 and id should be 29894
 and id should be 576076

我认为这是最简单的字符串连接的情况,但我对awk来说是全新的,所以我很可能会遗漏一些明显的东西。如何才能打印出我想要的字符串?

2 个答案:

答案 0 :(得分:2)

建议使用printf打印引用的字符串,这些字符串是POSIX兼容的,并且可以跨平台使用。

awk -F"," '{printf "rating should be %d and id should be %s\n", $2,$1}' input-file
rating should be 1 and id should be 1234
rating should be 2 and id should be 5678
rating should be 5 and id should be 1357
rating should be 4 and id should be 2468

print示例中修复未终止的双引号字符串,为我解决了问题

awk -F "," '{print "rating should be "$2" and id should be "$1""}' input-file
rating should be 1 and id should be 1234
rating should be 2 and id should be 5678
rating should be 5 and id should be 1357
rating should be 4 and id should be 2468

答案 1 :(得分:1)

这个问题与你的awk脚本没什么关系。您的输入文件包含control-Ms,使用dos2unix或类似内容删除它们。