shell 用逗号分隔的整数数组代替换行符的整数数组

laik7k3q  于 2023-04-07  发布在  Shell
关注(0)|答案(5)|浏览(180)

我想创建一个逗号分隔的数组列号我的输入文件存储为一个变量。
例如,如果我的输入文件包含4列,将1,2,3,4存储为变量comma_arr,然后我可以将comma_arr进一步作为变量传递。
我使用了这个代码:

clm=$(
    awk -F"\t" '{print NF}' clm.tsv |
        sort -nu |
        tail -n 1) &&
        arr=($(seq 1 $((clm)))) &&
        IFS=',' comma_arr="${arr[*]}" &&
        echo "${comma_arr[*]}"

)

我也试过使用echo "${comma_arr[@]}",但不是得到1,2,3,4,而是在新的一行中得到这些数字,如下所示:
1
2
3
4
输入文件(clm.tsv)如下所示:

DA NE UNKNOWN BLA
YES NO NA,NA LOL
YES NO NA,NA LOL
YES NO NA,NA LOL

我已经尝试了很多不同的组合,它们都返回了新的行列表。我不确定下一步该尝试什么。如果有用的话,命令declare -p comma_arr返回typeset comma_arr=$'1\n2\n3\n4'

j7dteeu8

j7dteeu81#

comma_arr=$(awk -F'\t' -v OFS=',' 'NR==1 {for(i=1;i<=NF;i++) $i=i; print}' clm.tsv)

只使用awk,并且只在输入文件的第一行使用。将输入字段分隔符设置为制表符,将输出字段分隔符设置为逗号,用索引替换所有字段,然后打印。

cwdobuhd

cwdobuhd2#

如果我的输入文件包含4列,则将1,2,3,4存储为变量comma_arr,然后我可以将comma_arr进一步作为变量传递。

comma_arr=$(awk -F"\t" 'NR==1{print NF}' clm.tsv | xargs seq 1 | paste -sd,)
vx6bjr1n

vx6bjr1n3#

我会怎么做:

$ comma_arr=$(
    awk 'BEGIN{FS="\t"}NR==1{for (i=1; i<=NF; i++) print i}' clm.tsv |
    paste -sd ,
)

$ echo "$comma_arr"
1,2,3,4
nlejzf6q

nlejzf6q4#

另一种可能性可能是:

comma_arr=$(seq -s, $(head -n1 clm.tsv | tr '\t' '\n' | wc -l))
0pizxfdo

0pizxfdo5#

你可以做的不仅仅是逗号

jot -s ',' 7
1,2,3,4,5,6,7

你可以让它有一个曲率

jot -s $'\f\b\b\b\b' 20 -399093 99999
-399093
   -372825
      -346557
         -320289
            -294021
               -267753
                  -241485
                     -215217
                        -188949
                           -162681
                              -136413
                                 -110145
                                    -83877
                                      -57609
                                        -31341
                                          -5073
                                           21195
                                            47463
                                             73731
                                              99999

或者用魔法下楼梯

jot -s $'\v\b\b\b\b\\___' -w '%X' 17 65535 4367
FFFF
\___F110
    \___E221
        \___D332
            \___C443
                \___B554
                    \___A665
                        \___9776
                            \___8887
                                \___7998
                                    \___6AA9
                                        \___5BBA
                                            \___4CCB
                                                \___3DDC
                                                    \___2EED
                                                        \___1FFE
                                                            \___110F

相关问题