【问题标题】:Bash: read file line by line, split line, pass as an command line argBash:逐行读取文件,分割行,作为命令行参数传递
【发布时间】:2016-10-03 15:19:40
【问题描述】:

我正在阅读一个 test.txt 文件。格式:

79033d0135a21e45c60e283785f5914b
dde8d97a40cd22667ccb3ca972197586
4fd5ea73cd51db256384fb3333b0eb3d

我正在逐行读取此文件并将其拆分为(例如,第 1 行:79 03 3d 01 35 a2 1e 45 c6 0e 28 37 85 f5 91 4b)

bash 脚本是:

#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
    a="$line" | cut -c1-2
    b="$line" | cut -c3-4
    c="$line" | cut -c5-6
    d="$line" | cut -c7-8
    e="$line" | cut -c9-10
    f="$line" | cut -c11-12
    g="$line" | cut -c13-14
    h="$line" | cut -c15-16
    i="$line" | cut -c17-18
    j="$line" | cut -c19-20
    k="$line" | cut -c21-22
    l="$line" | cut -c23-24
    m="$line" | cut -c25-26
    n="$line" | cut -c27-28
    o="$line" | cut -c29-30
    p="$line" | cut -c31-32
    #./a.out "$a" "$b" "$c" "$d" "$e" "$f" "$g" "$h" "$i" "$j" "$k" "$l" "$m" "$n" "$o" "$p"
    echo "$line"
    echo "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p"
done < test_10.txt

现在我只是想打印变量。我打算稍后将它们作为命令行参数传递给我的 C++ 程序。

问题是,我无法打印变量。当然,我的 C++ 程序也不能接受参数。

我做错了什么?

【问题讨论】:

    标签: bash file split line command-line-interface


    【解决方案1】:

    你需要命令替换,$(),(还有echo):

    a=$(echo "$line" | cut -c1-2)
    

    这里命令echo "$line" | cut -c1-2的STDOUT会被保存为变量a

    您可以使用此处的字符串&lt;&lt;&lt; 来传递变量内容,而不是创建匿名管道:

    a=$(cut -c1-2 <<<"$line")
    

    现在选择任何方法,并将相同的方法应用于所有其他方法。

    【讨论】:

    • 您好,谢谢!你能解释一下第二种解决方案吗?我的意思是匿名管道是什么意思?
    • @algoProg | 被称为匿名管道,必须使用echo "$line" | cut -c1-2,您需要一个额外的进程echo,并且处理第二个不需要的管道&lt;&lt;&lt;内部由外壳。
    • 清除!谢谢!
    【解决方案2】:

    要使管道按您的意愿工作,$line 的内容需要到达stdin,例如通过echo

    此外,您需要使用带有反引号的command substitution$()(后者是首选方法)将变量设置为命令的结果,否则它将尝试评估echo "$line" | cut -c1-2 的输出作为命令本身,可能会给您一个command not found 错误。

    例如,你的第一个作业应该是

    a=$(echo "$line" | cut -c1-2)
    

    其他人也会遵循类似的模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 2014-10-17
      • 2018-06-06
      • 1970-01-01
      • 2013-05-27
      相关资源
      最近更新 更多