Hak*_*kim 2 linux bash awk text sed
我正在使用一些包含字段分隔符的文本,它们是"||||":
substring1||||substring2
Run Code Online (Sandbox Code Playgroud)
子字符串也可能包含空格.我想根据分隔符"||||"拆分这些字符串,但我找不到合适的方法来做到这一点.我尝试了以下命令:
echo "substring1||||substring2" | awk '{split($0,a,"||||"); a[2],a[1]}'
Run Code Online (Sandbox Code Playgroud)
实际上,如果我只有一个"|"那个命令有效 作为分隔符.但我的问题是我有多个管道角色.
我也试过了
a=($(echo "substring1||||substring2" | sed -e "s/||||/\n/g"))
Run Code Online (Sandbox Code Playgroud)
如果子字符串不包含空格,它可以正常工作.但由于子字符串可能包含空格,因此它们也会在空格中分割,这是不希望的.
任何的想法?
使用正则表达式作为输入字段分隔符,如:
awk -F'[|]{4}' '{ printf "Field 1 -> %s\nField 2 -> %s\n", $1, $2 }' infile
Run Code Online (Sandbox Code Playgroud)
假设infile有内容:
sub string 1||||sub string2
Run Code Online (Sandbox Code Playgroud)
它产生:
Field 1 -> sub string 1
Field 2 -> sub string2
Run Code Online (Sandbox Code Playgroud)
编辑:对于awk不接受{n}语法使用的旧版本,-F'[|][|][|][|]'或者-F'[|]+'改为:
awk -c -F'[|]+' '{ printf "Field 1 -> %s\nField2 -> %s\n", $1, $2 }' infile
Run Code Online (Sandbox Code Playgroud)
另外--re-interval,感谢blue的评论:
awk -c --re-interval -F'[|]{4}' '{ printf "Field 1 -> %s\nField2 -> %s\n", $1, $2 }' infile
Run Code Online (Sandbox Code Playgroud)