如何从特定单词后面的csv行捕获字符串

如何从特定单词后面的csv行捕获字符串

如何从特定单词后面的csv行捕获字符串

例如,这是我们要剪切后面的字符串的 csv 行/data/

status=true /data/sdb/hadoop/hdfs/log,/data/sdc/hadoop/hdfs/log,/data/sdd/hadoop/hdfs/log,/data/sde/hadoop/hdfs/log,/data/sdf/hadoop/hdfs/log

预期结果示例

sdb
sdc
sdd
sde
sdf

答案1

使用grep

与PCRE:

grep -Po '/data/\K[^/]*'

如果不可用:

grep -o '/data/[^/]*' | cut -d'/' -f3

答案2

@pLumo 绝对有正确的答案。如果出于某种原因,您想使用awkbash 的内置参数扩展,同时又有点复杂......

LINE_COUNTER=0
while read line; do
    COUNT_SEP="${line//[^,]}"
    for col in $(seq 2 $((${#COUNT_SEP}+1))); do
        LINE_COUNTER=$(($LINE_COUNTER+1))
        COLUMN=$(echo "${line}" | awk -v variable="${col}" -F, '{ print $variable }')
        if [ $LINE_COUNTER -eq 1 ]
        then
            echo "${COLUMN}" > /tmp/splitCSV
        else
            echo "${COLUMN}" >> /tmp/splitCSV
        fi
    done
    while read splitCol; do
        echo "${splitCol}" | awk -F'/data/' '{ print $2 }' | awk -F'/' '{ print $1 }'
    done < /tmp/splitCSV
done < test.csv

答案3

只是添加一个选项,请记住只有一种模式可以匹配斜杠之间的三个字符,即sedgrep

grep -o "/.../"  foo | sed 's;/;;g' file

输出:

sdb
sdc
sdd
sde
sdf

答案4

这对我来说适用于 awk

awk -F'/' '{for(i=1;i<=NF;i++) if($i=="data") print $(i+1)}' <file>

1: -F 将字段分隔符定义为 /

2:循环每行的每个字段

3:如果字段等于“数据”,则打印下一个字段

相关内容