2

我有一个文件列表,正好有 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 

它将第二行分成两个子行。

4

1 回答 1

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
于 2012-08-28T11:31:01.690 回答