File Shell解决输出问题-连接和文件读取中的问题

File Shell解决输出问题-连接和文件读取中的问题,file,shell,File,Shell,我有一个简短的问题-我正在尝试解决一系列文件的问题,这些文件的输出已经更改 输出应如下所示: >Tests HadI-sdds1:4134:AAABBBBB:1:1101:6635:2407_2:N:0:TTTTTT AAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSGDFGDFGDFGDFGDFGDFGDFGDCCVBWAAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSG 但似乎是: >Tests HadI-sd

我有一个简短的问题-我正在尝试解决一系列文件的问题,这些文件的输出已经更改

输出应如下所示:

>Tests HadI-sdds1:4134:AAABBBBB:1:1101:6635:2407_2:N:0:TTTTTT
AAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSGDFGDFGDFGDFGDFGDFGDFGDCCVBWAAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSG
但似乎是:

>Tests HadI-sdds1:4134:AAABBBBB:1:1101:6635:2407_2:N:0:TTTTTT
AAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSGDFGDFGDFGDFGDFGDFGDFGDCCVBW
AAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSG
我已经编写了下面的代码试图修复它,但是第16行似乎返回了一个空字符串,但是当我在没有输入var的情况下执行echo时,我得到了完整的行

#!/bin/sh 
FILENAME=$1
OUTPUT=$2
set LineToWrite=''

while read LINE 
do
if  [ `echo "$LINE" | awk '{print substr($0,1,1)}'` == ">" ]
    then
        echo "$LineToWrite" >> $OUTPUT
        echo "$LINE" >> $OUTPUT
        set LineToWrite=''
    else
        set currLine=`echo "$LINE" | awk '{print substr($0,1,70)}'`
        set LineToWrite+=$currLine
fi
done <$FILENAME
#/垃圾箱/垃圾箱
文件名=$1
产出=$2
将LineToWrite设置为“”
读行时
做
如果[`echo“$LINE”| awk'{print substr($0,1,1)}'`==“>”]
然后
回显“$LineToWrite”>>$OUTPUT
回显“$LINE”>>$OUTPUT
将LineToWrite设置为“”
其他的
set currLine=`echo“$LINE”| awk'{print substr($0,1,70)}'`
设置LineToWrite+=$currLine
fi
完成(100万行)

提前多谢

三件事:

  • shell中的键和值之间不允许有空格
  • 对所有变量使用更多引号
  • 无需cat文件| while:使用
    while;做完成

使用更多的引用!它们至关重要。另外,了解“和”和“之间的区别。请参见和

嗨,斯普尼克,我已经按照您所描述的进行了更新,但仍然没有任何更改:/#!/bin/sh FILENAME=$1 OUTPUT=$2 set LineToWrite=”,而read LINE do if[
echo$LINE | awk'{print substr($0,1,1)}'
==“>”]然后echo$LineToWrite>>$OUTPUT echo$LINE>>$OUTPUT set LineToWrite=''否则设置currLine=
echo$LINE | awk'{print substr($0,70,1)}'
set LineToWrite+=$currLine fi done
echo“$VAR“
而不是
echo$VAR
对每个变量支持;)它仍然不返回任何内容:/问题是“W A…”之间的第三行中有1个空格,您想删除它吗?此外,是否每行数据都定义为以“>”字符开头?记录中真的嵌入了换行符吗?如果没有,最好将示例数据向下编辑,以说明出现在上面一行的每条记录的问题。似乎1 awk程序可以处理所有这些,但您的描述太难理解了。祝你好运。这是第2行(以W结尾)和第3行(以a开头)之间的换行符。只是stackoverflow没有正确显示样本。每个第一行都应以“>”开头,并且不应更改。不需要使用awk来测试字符串是否以“>”开头:
如果测试“$line”!=“${LINE#>}”;然后…
那么您的问题是一行数据中有一个中断,您需要将拆分记录重新连接在一起?关于示例数据,我的观点是“您是否需要对“我的数据已损坏”这么直白?”?我们不知道真正的问题是什么。考虑编辑你的帖子,使用一组较短的假数据,这样就可以很容易地看到什么是好的数据线和什么是坏的/坏的线。祝你好运。以上是你试图解决的数据问题的正确表示吗?祝你好运