【问题标题】:How to store variables from loop to a file如何将变量从循环存储到文件
【发布时间】:2017-07-05 11:36:36
【问题描述】:

我正在尝试将在以下循环中创建的变量 $d、$tf_name、$db_orig 存储到文件中。我希望以制表符分隔的 MY_FILE.txt 结尾,其中包含以下字段 $d、$tf_name、$ db_orig 和这组变量的每次迭代都要存储在文件 MY_FILE.txt 中的新行中。

MY_ARRAY=() 
for d in */
   do

   IN=$d
   folderIN=(${IN//_/ })
   tf_name=${folderIN[-1]%/*}
   db_orig=${folderIN[-2]%/*};

ENTRY="$d\t$tf\t$id\t$db_orig\n"
MY_ARRAY+=$ENTRY

done

$MY_ARRAY > MY_FILE.txt

它不能将 \t 和 \n 分别识别为 TAB 和 NEWLINE。它将所有值彼此相邻地存储在同一行中,没有 TAB,在数组 MY_ARRAY 中。

有什么帮助吗?

【问题讨论】:

    标签: arrays shell loops append


    【解决方案1】:

    是的,这是因为 $MY_ARRAY > MY_FILE.txt 不是有效命令。

    您需要将数组打印到文件中。

    为了正确打印,您需要使用
    echo -e "${MY_ARRAY[@]}" >fileprintf

    由人回声

    echo -e : enable interpretation of backslash escapes
    

    此外,如果您需要将 $ENTRY 存储到您的数组中,您需要这样做:

    MY_ARRAY+=("$ENTRY")
    

    在任何情况下,您都可以在不需要数组的情况下做到这一点。您可以在 ENTRY 中应用 += :ENTRY+="$d\t$tf\t$id\t$db_orig\n"

    测试:

    $ e+="a\tb\tc\td\n"
    $ e+="aa\tbb\tcc\tdd\n"
    $ e+="aaa\tbbb\tccc\tddd\n"
    $ echo -e "$e"
    a       b       c       d
    aa      bb      cc      dd
    aaa     bbb     ccc     ddd
    
    # Test with array
    $ e="a\tb\tc\td\n" && myar+=("$e")
    $ e="aa\tbb\tcc\tdd\n" && myar+=("$e")
    $ e="aaa\tbbb\tccc\tddd\n" && myar+=("$e")
    $ echo -e "${myar[@]}"
    a       b       c       d
     aa     bb      cc      dd
     aaa    bbb     ccc     ddd
    
    #Alternative array printing
    $ for i in "${myar[@]}";do echo -en "$i";done
    a       b       c       d
    aa      bb      cc      dd
    

    【讨论】:

    • @elpavlos 再次更新。如果你愿意,你可以避免使用数组。
    • 非常感谢乔治斯。问题已解决,文件已创建!
    • 刚刚提出另一个问题。在某些情况下,某些变量不存在。假设第 3 次迭代 $db_orig 没有价值。是否可以在文件 ($d, $tf, $id) 中创建第三行并在此特定字段 $db_orig 处具有 NA 或只是空白?在我的脚本中,这种情况根本没有条目。
    • @elpavlos 可以用 clasic bash 方法解决(参见 man bash)。 Test1 : d="something" && echo "${d:-"NA"}" --> 打印一些东西。测试 2:d="" && echo "${d:-"NA"}" --> 打印 NA
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多