2

ファイルのリストがあり、正確に 14.000 ファイルです。各ファイルには 1 行と多数の列が含まれます (ファイルには 1 行と 9,000 列を含めることができます)。そのすべてのファイルを 1 つのファイルに連結したいと思います。各ファイルには 18 行のヘッダー行が含まれているため、"tail" を使用しました。問題は、(おそらく長すぎるために) 行が分割されて新しい行に書き込まれることがあるため、連結が失敗することです。この方法では、元の出力を再構築できません。14,000 個のファイルでは、分割が発生した場所を確認できないからです。誰かがこの問題を克服するのを手伝ってくれますか?

最初の 18 行のヘッダー行を削除した後の 2 つのファイルの例:

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 

2 行目を 2 つのサブ行に分割します。

4

1 に答える 1

1

たとえば、このスクリプトを使用して、FLD1、FLD2 フォルダーがあるディレクトリで実行して、19 行目を抽出してみてください。

 #!/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 に答える