我有一个包含多个字段和两种分隔符的文件。如果其中一个字段中的分隔符数量达到了定义的数量,那么我希望在复制该行的第一部分后,在满足该数字后将该字段拆分到下一行。
在awk或sed中这可能吗?
实施例
输入
a1|b|c|d|1,2,3,4| a2|b|c|d|1,2,3,4,5,6,7,8,9,10| a3|b|c|d|1,2|
最大数量= 6,在字段5中用逗号分隔
输出
a1|b|c|d|1,2,3,4| a2|b|c|d|1,2,3,4,5,6| a2|b|c|d|7,8,9,10| a3|b|c|d|1,2|
答案 0 :(得分:0)
awk
救援!
awk -F\| -v OFS=\| -v c=',' '
{n=split($5,a,c);
if(n>6)
{f=$5;
$5=a[1] c a[2] c a[3] c a[4] c a[5] c a[6];
print;
$5=f;
gsub(/([^,]+,){6}/,"",$5)}}1' file
答案 1 :(得分:0)
假设不需要多次拆分:
NoneType
$ sed -E 's/^(([^|]+\|){4})(([^,]+,){5}[^,]+),(.*)/\1\3|\n\1\5/' ip.txt
a1|b|c|d|1,2,3,4|
a2|b|c|d|1,2,3,4,5,6|
a2|b|c|d|7,8,9,10|
a3|b|c|d|1,2|
使用ERE,某些-E
版本使用sed
选项-r
前4列由^(([^|]+\|){4})
|
由(([^,]+,){5}[^,]+)
分隔的6列(不含尾随,
),
第6列和第7列之间的逗号,
其余部分(.*)
根据需要拆分
列和最大数也可以从shell变量传递(示例显示为\1\3|\n\1\5
)
bash