在连接期间分割线

时间:2012-08-28 09:40:34

标签: unix filter

我有一个文件列表,正好是14.000个文件。每个文件只包含一行和多列(一个文件可以包含1行和9.000列)。我想在一个文件中连接所有文件。由于每个文件包含18个标题行,我使用“tail”。问题是连接失败,因为有时一条线(可能是因为它太长)被拆分并写在一个新行上。这样我就无法重建原始输出,因为在14,000个文件中无法检查拆分发生的位置。任何人都可以帮我解决这个问题吗?

删除前18个标题行后,只有两个文件的示例:

FLD1/file.txt:
...18 lines of header here...
PITPNM1 MARCH1  0.076739 MARCH5 0.134571 

FLD2/file.txt:
...18 lines of header here...
SEPT11 0.109543 DEC1 0.0536367  201205_at 0.0582265 202881_x_at 0.224719 

我的期望是:

PITPNM1 MARCH1  0.076739 MARCH5 0.134571 
SEPT11  0.109543 DEC1 0.0536367 201205_at 0.0582265 202881_x_at 0.224719 

相反,它错误地给出的输出是:

PITPNM1 MARCH1  0.076739 MARCH5 0.134571    
SEPT11  0.109543 DEC1 0.0536367 201205_at    
0.0582265 202881_x_at   0.224719 

它将第二行拆分为两个子行。

1 个答案:

答案 0 :(得分:1)

您可以尝试提取第19行,例如使用此脚本,在FLD1,FLD2文件夹所在的目录中运行。

 #!/bin/sh
 find . -name file.txt |
 while read -r file; do
   awk 'NR==19' $file
 done > resultfile

但请注意,Unix中的定义表明它不能任意长。如果你的系统上的awk截断长行或拆分它们,请使用perl,即

 perl -ne 'print if ($. == 19)' $file   # instead of awk above