标题: [问题求助] 求awk分隔符写法 [打印本页]
作者: hfxiang 时间: 2022-9-20 16:52 标题: 求awk分隔符写法
有如下记录- "f ield1 - fi eld2""fie ld3" "fiel d4" "field 5"
复制代码
每1个记录内有复制代码
等4种分隔符(不含方括号[]),使用次序随机,现用awk进制分割,想要得到- $1=f ield1
- $2=fi eld2
- $3=fie ld3
- $4=fiel d4
- $5=field 5
复制代码
以下指令(在Windows下测试)分隔符(-F"????")该如何写,才能得到想要的结果- echo "f ield1 - fi eld2""fie ld3" "fiel d4" "field 5"|awk -F"????" "{print $1,$2,$3,$4,$5}"
复制代码
感谢各位大神的教导,谢谢
作者: Batcher 时间: 2022-9-20 17:11
回复 1# hfxiang
这个不是单纯设置列分隔符能解决的。
首先会遇到的问题就是双引号作为列分隔符之一的话,某些列是空值,跟你希望的结果不一样。
设置多个列分隔符在语法上是这样的:
echo "f ield1 - fi eld2""fie ld3" "fiel d4" "field 5" | gawk -F "[-\"]+" "{print $2; print $3; print $4; print $6; print $8}"
作者: hfxiang 时间: 2022-9-21 08:03
回复 2# Batcher
是的,谢谢。
(-F "[-\"]+") 的确不是俺想要的结果
作者: hfxiang 时间: 2023-2-26 09:27
目前找到最接近的方法是在-F后的分隔符表达式用其字符对应的八进制替代(空格\040、双引号\042、减号\055),具体如下:- echo "f ield1 - fi eld2""fie ld3" "fiel d4" "field 5"|awk -F"\042|\040\055\040|\042\042|\042\040\042" "{for(i=0;++i<NF;)print \"$\"i\"=\"$i}"
- 输出:
- $1=
- $2=f ield1
- $3=fi eld2
- $4=fie ld3
- $5=fiel d4
- $6=field 5
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |