我想从这个格式化数据
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/