偶数/奇数行を新しい列として印刷

偶数/奇数行を新しい列として印刷

単一の列にX行のファイルがあり、各偶数/奇数行を新しい列に印刷したいと思います。vimLinuxやエディタでこれは可能ですか?

たとえば、

入力ファイル:

RESOLUTION: 1.70
UNIT: MONOMERIC
RESOLUTION: 1.80
UNIT: DIMERIC
RESOLUTION: 2.50
UNIT: TRIMERIC
RESOLUTION: 2.20
UNIT: TETRAMERIC

必要な出力ファイル:

RESOLUTION: 1.70    UNIT: MONOMERIC
RESOLUTION: 1.80    UNIT: DIMERIC
RESOLUTION: 2.50    UNIT: TRIMERIC
RESOLUTION: 2.20    UNIT: TETRAMERIC

答え1

以下で試してください。

$cat a.txt
RESOLUTION: 1.70
UNIT: MONOMERIC
RESOLUTION: 1.80
UNIT: DIMERIC
RESOLUTION: 2.50
UNIT: TRIMERIC
RESOLUTION: 2.20
UNIT: TETRAMERIC

$ cat a.txt | sed 'N;s/\n/ /g'
RESOLUTION: 1.70 UNIT: MONOMERIC
RESOLUTION: 1.80 UNIT: DIMERIC
RESOLUTION: 2.50 UNIT: TRIMERIC
RESOLUTION: 2.20 UNIT: TETRAMERIC

答え2

データが z1 ファイルにあると仮定すると

paste -sd "\t\n" z1

生産します:

RESOLUTION: 1.70        UNIT: MONOMERIC
RESOLUTION: 1.80        UNIT: DIMERIC
RESOLUTION: 2.50        UNIT: TRIMERIC
RESOLUTION: 2.20        UNIT: TETRAMERIC

そのようなシステムでは:

OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution        : Debian 8.11 (jessie) 
bash GNU bash 4.3.30
paste (GNU coreutils) 8.23

頑張って...乾杯、drl

答え3

あなたは正しい場所(awkまたはsed)を探しています。

sedgnuを使えば十分ですsed

バラよりhttps://www.gnu.org/software/sed/manual/sed.html#Numeric-Addresses

4.2 数字で行を選択

first〜stepこのGNU拡張は、最初の行から始まるすべてのステップ行と一致します。特に、現在の行番号がfirst +(n * step)に等しくなるように負でないnがある場合、行が選択されます。したがって、1~2で奇数行を選択し、0~2で偶数行を選択し、2行目から3行目を選択し、「2~3」を使用して5行目を選択します。 10行目から一度「10~5」を使い、「50~0」は50をあいまいに表現したものです。

次のコマンドは、ステップアドレスの使用を示しています。

$シーケンス10 | sed -n '0〜4p' 4 8

$シーケンス10 | sed -n '1〜3p' 1 4 7 10

答え4

奇数行に末尾の空白がある場合は、edスクリプトを作成できます。

{ for((line=1; line <= $(wc -l < input) / 2; line++)); do printf '%d,%dj\n' "$line" "$((line + 1))"; done; echo "wq"; } | ed -s input

再フォーマット:

{ for((line=1; line <= $(wc -l < input) / 2; line++))
  do 
    printf '%d,%dj\n' "$line" "$((line + 1))"
  done
  echo "wq"
} | ed -s input

一般的なアイデアは、行数を数えて2を分割すると、印刷edコマンドが奇数行と偶数行を結び付けることです。 8行のサンプルファイルの場合、ループは次のedコマンドを生成します。

1,2j
2,3j
3,4j
4,5j

最後のコマンドはファイルをディスクに書き込んで終了するように指示echoします。ed

この方法では隣接する行の間にスペースを追加しないため、タブを追加する必要がある場合は、既存の行の前にこの行を追加してタブを挿入する必要がありますprintf

        printf '%ds/$/  /\n' "$line"

代替テキストに表示されるスペースはタブ文字です(、で入力Control-VTAB

関連情報