【问题标题】:How to append and print Numbers from a text file?如何从文本文件中追加和打印数字?
【发布时间】: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


    【解决方案1】:

    这是“引用过多”的罕见情况之一。观察:

    $ 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

    【讨论】:

      【解决方案2】:

      你可以使用awk:

      $ awk '{printf "%s,100\n", $0}' file
      1,100
      2,100
      3,100
      4,100
      5,100
      

      【讨论】:

        【解决方案3】:

        你可以使用

        while read in; do echo "$in,100"; done < file.txt
        

        您的错误是由printf 一次获取整个文件而不是逐行导致的。

        【讨论】:

          【解决方案4】:

          怎么样:

          ( set -f; set -- $(< file.txt)
            printf '%d,100\n' "$@" )
          

          【讨论】:

            【解决方案5】:
            seq 6 | awk '$0=$0",100"'  
            1,100
            2,100
            3,100
            4,100
            5,100
            6,100
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-01-06
              • 2021-07-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多