我有一个文件列表,正好是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
它将第二行拆分为两个子行。
答案 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