Bash 打印字段时awk切断

Bash 打印字段时awk切断,bash,awk,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

我搜索了无数次,找不到任何东西来解决这个看似简单的问题

我有下面一行代码,它读取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完全是新手,所以我很可能遗漏了一些明显的东西。如何让它打印我想要的字符串?

建议使用以打印带引号的字符串,它与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

这个问题与您的awk脚本没有任何关系,因为您的awk脚本很好。您的输入文件包含控件Ms,请使用dos2unix或类似工具删除它们。

@i当然可以,抱歉。添加了额外的信息。很好,谢谢,但是你知道为什么我会在打印时截取输出吗?@ssb:好吧,一开始你有一个不平衡的双引号
printf
是我打印自定义字符串的第一个想法,谢谢,我不知道我需要在它的末尾添加双引号。@ssb:基本上是整个
print
在双引号内,分别为
$1
$2
扩展它们的值。唯一的原因是“解决”问题是
printf“%d”
正在将字符串
$2
转换为数字
$2
。如果您尝试使用
%s
将其打印为字符串,则问题仍然存在,因为问题是输入中的尾随控件Ms,而不是输出打印。谢谢,我听说行尾是一个问题。当我回到我的工作机器上时,我会验证这一点,如果是这样的话,我会将接受的答案切换到这一点。