Gre*_*egg 7 arrays bash shell awk
我有一个CSV文件(usvd.csv),其中包含41列,我的bash脚本处理标题行以查看要打印的列,结果是我需要打印41列中的26列.这些可能不同 - CSV中的列数和/或需要打印的列数.
包含需要打印的列数的数组如下:
${UNIQUE[@]} = 1 2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 26 30 35 37 39 40 41
Run Code Online (Sandbox Code Playgroud)
因此,在41列中,我只想打印上面列出的列,它们可能因文件而异.
谢谢!!
我喜欢@ devnull的解决方案,但为了完整性我会建议一个awk
版本:
$ list=$(echo "${UNIQUE[@]}")
$ awk -vd="$list" 'BEGIN{split(d, a, " ")} {for (i in a) printf "%s ", $(a[i]); printf "\n"}' file
col3 col4 col7
col3 col4 col7
col3 col4 col7
Run Code Online (Sandbox Code Playgroud)
对于给定的文件
col1 col2 col3 col4 col5 col6 col7
col1 col2 col3 col4 col5 col6 col7
col1 col2 col3 col4 col5 col6 col7
Run Code Online (Sandbox Code Playgroud)
list=$(echo "${UNIQUE[@]}")
将数组转换为具有空格分隔字段的字符串.-vd="$list"
将bash变量传递$list
给awk以用作d
.BEGIN{split(d, a, " ")}
d
按空格将字符串拆分成片段,以便[1] = field1,a [2] = field2,...{for (i in a) printf "%s ", $(a[i]); printf "\n"}'
循环和打印.您可以使用cut
。考虑以下示例:
UNIQUE=(1 2 4 6) # Array containing columns to be printed
fields=$( IFS=, echo "${UNIQUE[@]}") # Get the fields in comma-delimited form
# seq -s, 10 would print the string: 1,2,3,4,5,6,7,8,9,10
seq -s, 10 | cut -d, -f"${fields[@]}" # Print the desired fields
Run Code Online (Sandbox Code Playgroud)
这会导致
1,2,4,6
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1623 次 |
最近记录: |