使用bash操作CSV文件并删除特定列中的CR LF

gupuwyp2  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(127)

我有一个由供应商生成的文件。该供应商拒绝剥离某些数据中间的CR LF,因为他们在文件中将两行连接在一起。结果是手动识别和清理这些示例。
我想做的是,对于这个文件中的每一行,如果在记录的第6个位置有一个CR LF--那么删除它并用一个空格替换它。这里有一个例子,在第6个位置有一个,我需要解析出来。这个文件有100 - 200万行,只有大约1-2行在记录的第6个位置有CR LF。在每个记录的末尾也有一个CR LF。所以我不能只替换文件中CRLF的每个示例。

XXXXXX~XXXXXX~XXXXXX~XXXXXX~~-NEW CUSTOMER HANK BUDREAU
DL:WD-XX-XX5
CONF# 12344564 ~XXXXXX~XXXXXX~XXXXXX~KWH~~000015~16~10132022074500PM~10~0.0798~10~0.0582~10~0.0606~10~0.0666~10~0.8358~10~1.5564~10~1.0986~10~0.6048~10~0.2022~10~0.0372~10~0.045~10~0.0318~10~0.0366~10~0.036~10~0.0294~10~0.0672~
vmjh9lq9

vmjh9lq91#

如果你事先知道字段的数量(这里是47),那么你可以这样使用:

awk -F '~' -v nFields=47 '
    NF < nFields {
        if (nf) {
            rec = rec "\n" $0
            if (NF)
                nf += NF - 1
        } else {
            rec = $0
            nf = (NF ? NF : 1)
        } 
        if ( nf >= nFields ) {
            gsub(/\r\n/," ",rec)
            print rec
            nf = 0
        }
        next
    }
    1
'

**注意:**如果最后一个字段包含LF,则上述代码无效。

相关问题