2つのファイルに行を展開します。

2つのファイルに行を展開します。

$file1各人の2行のデータを含むデータファイル()があります。他のデータファイルでデータの3行目()を展開する必要があります$file2。だから私の入力は次のようになります

>cat $file1
  bob  1  1  0
  bob  1  0  1
  alan 0  0  1
  alan 0  1  1

>cat $file2
 bob  a  a  b
 alan a  c  a

したがって、望ましい結果は次のとおりです。

>cat $file3
  bob  1  1  0
  bob  1  0  1
  bob  a  a  b
  alan 0  0  1
  alan 0  1  1
  alan a  c  a

他のすべての行を分散する必要がある場合は、paste次のように使用します。

>paste '-d\n' $file1 $file2

これを達成するための最良のツールは何ですか?を使用していますzsh

答え1

のみ:

paste -d '\n' -- - - "$file2" < "$file1"

$file2いいえと仮定-)。

または(変数の内容、ファイル名)に改行文字が含まれていない場合、またはスペースまたはタブで始まらない場合は、sedGNUを使用してください。$file2

sed "2~2R$file2" "$file1" < "$file2"

使用してくださいawk(文字が$file1含まれていない場合=(または含まれている場合は前の部分は許可されているawk変数名ではありません)):

export file2
awk '{print}
     NR % 2 == 0 {if ((getline l < ENVIRON["file2"]) > 0) print l}
    ' "$file1"

答え2

順序を維持する必要がない場合はできますcat $file1 $file2 | sort

答え3

その他アッ

awk '
    FNR==NR{
        A[$1]=$0
        next
    }
    1
    !(NR%2){
        print A[$1]
    }
    ' file2 file1

pasteあるいは、両方のファイルが正しくソートされている場合はより簡単です(canを使用)。

awk '
    1
    !(NR%2){
        getline <"file1"
        print
    }
    ' file1

関連情報