Shell脚本-获取包含通过数组传递的值的csv字段/列

wsxa1bj1  于 2023-01-31  发布在  Shell
关注(0)|答案(2)|浏览(57)

Shell脚本-获取包含通过数组传递的值的csv字段/列
inputdata1.txt文件的示例数据具有如下值-

id name gender

test.csv的样本数据具有多个字段/列,其中一些字段/列具有值id,值类似于test.csv的2行

/"id":"21"/, /"p1":"abc"/,  /"id":"22"/  
/"id":"23"/, /"p2":"zyx"/,  /"id":"24"/,  /"id":"25"/

类似地具有多行
需要输出-仅获取包含ID的列&我可以获取整行,但仅需要该列
输出如下格式2行csv

/"id":"21"/ /"id":"22"/
/"id":"23"/ /"id":"24"/ /"id":"25"/

面临问题"${keywords [$j ]}"不返回任何值,如果我仅用于打印它的工作与此命令有问题

awk -F, '{for (i=1;i<=NF;i++) if ($i~ "${keywords[$j]}") {print $i}}' test.csv

我的代码:

#!/bin/bash

declare -a keywords=(`cat inputdata1.txt`)

length=${#keywords[@]}

for (( j=0; j<length; j++ ));
do
awk -F, '{for (i=1;i<=NF;i++) if ($i~ "${keywords[$j]}") {print $i}}' test.csv
#awk -F, '{ for (i=1;i<=NF;i++) if($i~ "id") {print $i}}' test.csv

printf "Current index %d with value %s\n" $j "${keywords[$j]}"

done

需要输出-仅获取包含ID的列&我可以获取整行,但仅需要该列
1.如果我尝试从命令中删除',它会给我错误-:

syntax error near unexpected token `('
test.sh: line 14: `  awk -F, {for (i=1;i<=NF;i++) if ($i~ "${keywords[$j]}") {print $i}} request.csv'

1.如果我尝试添加",则错误为

awk: syntax error at source line 1
 context is
    {for (i=1;i<=NF;i++) if >>>  (~ <<< 
awk: illegal statement at source line 1
bbuxkriu

bbuxkriu1#

对数组的数组和sorted_in使用GNU awk:

$ cat tst.sh
#!/usr/bin/env bash

awk '
{ gsub(/^[[:space:]]+|[[:space:]]+$/,"") }
NR==FNR {
    for ( i=1; i<=NF; i++ ) {
        tag = $i
        gsub(/^\/"|".*$/,"",tag)
        vals[tag][NR] = (NR in vals[tag] ? vals[tag][NR] " " : "") $i
    }
    next
}
{
    PROCINFO["sorted_in"] = "@ind_num_asc"
    for ( i=1; i<=NF; i++ ) {
        tag = $i
        if ( tag in vals ) {
            for ( rowNr in vals[tag] ) {
                print vals[tag][rowNr]
            }
        }
    }
}
' FS=', *' test.csv FS=' ' inputdata1.txt
$ ./tst.sh
/"id":"21"/ /"id":"22"/
/"id":"23"/ /"id":"24"/ /"id":"25"/
pgccezyw

pgccezyw2#

awk -v var="${keywords[$j]}" -F, '{for (i=1;i<=NF;i++) if ($i ~ var) {print $i}}' test.csv

谢谢大家的支持!!

相关问题