$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
いいえと仮定-
)。
または(変数の内容、ファイル名)に改行文字が含まれていない場合、またはスペースまたはタブで始まらない場合は、sed
GNUを使用してください。$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