我有一个文件
1|2|3|4
a|b|c|d
1|2
3|4
a|
b|
c|
d|
该文件应该有4个字段可以加载到数据库中。该文件可能包含cr,lf或行尾字符。
我希望看到的输出是
1|2|3|4
a|b|c|d
1|23|4
a|b|c|d
我试过了
BEGIN {FS="|";break_flag = 0;field_count=4}
{
#print NF
delc=gsub(/\|/,"|",$0)
print delc
if (NF == 4 )
{
print $0
}
else if (delc != 3)
{
#gsub("\"","")
gsub(/\r/,"")
printf("%s|",$0)
}
}
我想要的是,如果该行没有4个字段,请继续阅读,直到获得4个字段并打印出没有cr,lf等的字段。作为字段分隔符
谢谢,
答案 0 :(得分:0)
您可以尝试以下内容:
awk -f f.awk input.txt
其中f.awk
是
{
sub(/[[:blank:]]*$/,"")
ss=(NR==1)?$0: (ss "|" $0)
}
END {
gsub(/\|\|/,"|",ss)
n=split(ss,a,"|")
for (i=1; i<=n; i+=4)
for (j=0; j<4; j++)
printf "%s%s",a[i+j],(j<3)?"|":ORS
}
答案 1 :(得分:0)
gnu awk版本(由于RS)
awk '$1=$1 {printf "%s" (NR%4?"|":"\n"),$0}' RS="[|\n]" file
1|2|3|4
a|b|c|d
1|2|3|4
a|b|c|d