2016-04-02 18 views
-1

行番号が異なる2つのファイルがある場合、同じ行を出力し、大きなファイルで余分な行を省略します。別の行番号ファイルに貼り付けコマンド

私は何を書き込むべきですか?

私が試した:

paste -d: file1 file2|awk -F ':' '{print $1,$7}' 

をしかし、それは動作しませんでした。

+1

2つのファイルと必要な出力の小さなサンプルでQを編集します。編集ボックスの左上にある強調表示されたテキストの '{}'書式ツールを使用して、コード/データ/出力として書式を設定します.Good Luck。 – shellter

答えて

0

普段のバージョンのpasteではこのようなオプションはありません。 Awkで行うのは難しいことではありません。

awk 'NR==FNR { a[NR]=$0; next } 
    ! (FNR in a) { exit 0 } 
    { print a[FNR] ":" $0 }' file1 file2 

FNR現在のファイル内の行番号で、NRは、入力ファイル間未収行番号です。最初の入力ファイルが処理されている間、最初の条件は真です。私たちがなくなるまでペアを印刷します。

この単純なバージョンは、2つのファイルが必要な場合には十分です。 3つ以上に一般化すると、かなり複雑なリファクタリングが必要になります。

一時的な回避策であれば、すべてのファイルを処理するまで、2つのファイルから開始し、1つの入力ファイルなどで別の呼び出しにパイプすることができます。

例のようにフィールドを抽出したい場合は、$0(入力行全体)を$1(最初のフィールド)か適切なものに変更してください。

最初のファイルの行をメモリに読み込む必要はなく、任意の数の入力ファイルを処理するPythonの実装です(おそらく、OSによって許可されているファイルの数)。オプションの解析とエラーチェックが残っています。

from sys import argv 

h = [] 
for filename in argv[1:]: 
    h.append(open(filename, 'Ur')) 
while True: 
    line = [] 
    try: 
     for handle in h: 
      result = handle.readline() 
     if result == '': 
      raise StopIteration 
     line.append(result.rstrip('\n')) 
    print(':'.join(line)) 
    except StopIteration: 
     break 
for handle in h: 
    handle.close() 
0

代替ソリューションawkに、特にあなたは、フィールド

$ join <(cat -n file1) <(cat -n file2) | cut -d' ' -f2- 

飾る/ undecorateパターンを編集していない場合。行番号を追加し、行番号と1-1をマージして最後に削除します。

関連する問題