【发布时间】:2016-10-08 03:27:45
【问题描述】:
我需要从file.txt开始,其中包含这样的条目:
1
2
3
4
5
我需要打印以下内容:
1,100
2,100
3,100
4,100
5,100
我已经尝试过了,但收到无效号码错误:
printf '%d,100\n' "$(< file.txt)"
【问题讨论】:
标签: linux bash list printf text-files
我需要从file.txt开始,其中包含这样的条目:
1
2
3
4
5
我需要打印以下内容:
1,100
2,100
3,100
4,100
5,100
我已经尝试过了,但收到无效号码错误:
printf '%d,100\n' "$(< file.txt)"
【问题讨论】:
标签: linux bash list printf text-files
这是“引用过多”的罕见情况之一。观察:
$ cat file.txt
1
2
3
4
5
$ var=$(< file.txt)
$ echo "$var" # Quotes preserve original whitespace
1
2
3
4
5
$ echo $var # No quotes reduce all whitespace to single spaces
1 2 3 4 5
引号使echo“看到”只是一个参数,即格式化的文件内容。如果没有引号,每一行都会成为echo 的参数,并且它们仅以空格分隔。
所以,你可以解决你的问题
$ printf '%d,100\n' $(< file.txt)
1,100
2,100
3,100
4,100
5,100
另一种解决方案是使用 sed:
$ sed 's/$/,100/' file.txt
1,100
2,100
3,100
4,100
5,100
这会将每一行的行尾 $ 替换为 ,100。
【讨论】:
你可以使用awk:
$ awk '{printf "%s,100\n", $0}' file
1,100
2,100
3,100
4,100
5,100
【讨论】:
你可以使用
while read in; do echo "$in,100"; done < file.txt
您的错误是由printf 一次获取整个文件而不是逐行导致的。
【讨论】:
怎么样:
( set -f; set -- $(< file.txt)
printf '%d,100\n' "$@" )
【讨论】:
seq 6 | awk '$0=$0",100"'
1,100
2,100
3,100
4,100
5,100
6,100
【讨论】: