我想从这个格式化数据

header1|header2|header3
"ID001"|"""TEST"""|"
TEST TEST TEST"|"TEST 4"
"ID002"|"TEST"|"TESTTESTTEST"|"TEST 5"

进入
header1|header2|header3
"ID001"|"TEST"|"TEST TEST TEST"|"TEST 4"
"ID002"|"TEST"|"TESTTESTTEST"|"TEST 5"

所以逻辑是
  • 将标题保留为原始
  • 检查其他行,如果不是以 "开头,则将此行移动到上一行的末尾
  • 将 """替换为 "

  • 我想用 bash 脚本格式化它。

    我已经创建了这条线,但仍然无法正常工作
    #!/bin/bash
    
    
    if [ $# -eq 0 ]
      then
        echo "No arguments supplied"
    exit;
    fi
    
    FOLD=$1"*"
    CHECK=$1"/bix.done"
    
    
    
    if test -f $CHECK; then
    date > /result.txt
    echo "starting Covert.... "
    echo "from folder : " $1
    
    
        for file in $FOLD
        do
              if [[ $file != *History* ]]; then
            if  [[ $file == *.csv ]]; then
                FILETEMP=$file".temp"
                mv $file $FILETEMP
                awk '/^"/ {if (f) print f; f=$0; next} {f=f FS $0} END {print f}' $FILETEMP > $file
                #rm $FILETEMP
            fi
              fi
    
        done
    date > /home/result.txt
    
    fi
    
    
    
    #ls $1 -l
    
    
    

    最佳答案

    这可能对你有用(GNU sed):

    sed '1b;:a;N;/\n"/!s/\n//;ta;s/"""/"/g;P;D' file
    

    始终打印第一个标题行。将下一行附加到当前行,如果该行不是以 " 开头,则删除换行符并重复直到出现这样的行。现在用一个 " 全局替换 """,打印第一行并重复。

    关于regex - 如何使用 bash 脚本格式化此数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57584693/

    10-14 12:25