$ seq 9 | sed -n 'p;n;h;n;G;p'
1
3
2
4
6
5
7
9
8
つまり、p
現在の行を印刷し、n
を取得します ext one、h
古い、n
を取得します ext one、G
保持された行を取得 (パターン スペースに追加) し、p
その 2 行のパターン スペースを 3 行目と 2 行目を入れ替えて印刷します。
awk
の使用 および整数演算:
awk 'NR%3 == 1 { print } NR%3 == 2 { delay=$0 } NR%3 == 0 { print; print delay; delay=""} END { if(length(delay) != 0 ) { print delay } }' /path/to/input
モジュラス演算子は整数除算を実行し、剰余を返すため、各行に対してシーケンス 1、2、0、1、2、0 [...] が返されます。それを知っているので、モジュラスが 2 である行の入力を後で保存するだけです。つまり、ゼロのときに入力を出力した直後です。
別の問題 アプローチ:
awk '{print $0; if ((getline L2)>0 && (getline L3)>0){ print L3 ORS L2 }}' file
出力:
gi_1234
I have a cat.
My cat is blue.
gi_5678
I also have a dog.
My dog is orange.
-
(getline L2)>0 && (getline L3)>0
- 次の 2 を抽出します 存在する場合は記録 -
2 番目と 3 番目のレコードはそれぞれ
L2
に割り当てられます そしてL3
それぞれの変数