如何通过删除bash脚本中的分隔符来提取列

如何通过删除bash脚本中的分隔符来提取列,bash,Bash,有一个巨大的文件,其中列由| ~ |分隔符分隔。 如何使用shell命令提取所需的列数? 假设文件看起来像: column1|~|column2|~|column3|~|column4|~|column5|~|column6|~|column7 我们要提取第4列和第5列 awk -F "(|~|)" '{ print $4,$5 }' file 使用-F将字段分隔符设置为“| ~|”,然后在普通bash中打印第四和第五个字段($4,$5): #!/bin/bash wh

有一个巨大的文件,其中列由| ~ |分隔符分隔。 如何使用shell命令提取所需的列数? 假设文件看起来像:

column1|~|column2|~|column3|~|column4|~|column5|~|column6|~|column7
我们要提取第4列和第5列

awk -F "(|~|)" '{ print $4,$5 }' file

使用-F将字段分隔符设置为“| ~|”,然后在普通
bash
中打印第四和第五个字段($4,$5)

#!/bin/bash

while IFS= read -r line; do
    readarray -t fields <<< "${line//'|~|'/$'\n'}"
    printf '%s %s\n' "${fields[3]}" "${fields[4]}"
done < file
或者,使用GNU
sed

sed -E 's/\|~\|/\n/g; s/([^\n]*\n){3}(([^\n]*\n){2}).*/\2/; s/\n/ /g' file

到目前为止你试过什么?我建议在提出这样一个高层次的问题之前,考虑一下你将采取哪些通用步骤来解决你的问题,以及你将如何单独实施这些步骤。例如,如何在bash中声明数组,如何在bash中基于分隔符拆分字符串,如何在bash中逐行读取文件
sed -E 's/\|~\|/\n/g; s/([^\n]*\n){3}(([^\n]*\n){2}).*/\2/; s/\n/ /g' file