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



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

column1|~|column2|~|column3|~|column4|~|column5|~|column6|~|column7

我们想提取第4列和第5列

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

将字段分隔符设置为"|~|"使用-F,然后打印第4和第5个字段($4,$5)

在普通bash:

#!/bin/bash
while IFS= read -r line; do
readarray -t fields <<< "${line//'|~|'/$'n'}"
printf '%s %sn' "${fields[3]}" "${fields[4]}"
done < file

或,带awk

awk -F '\|~\|' '{ print $4, $5 }' file

或者GNUsed:

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

最新更新