列を2つに分割する

列を2つに分割する

1つの列で構成されるファイルがあり、それを2つの列に分割する必要があります。私は試したcolumnコマンドが機能していないようです。

123-zyx
234-yxw
345-xwv
456-wvu
567-vut
678-uts

答え1

tr単にユーティリティを使用できます。

tr '-' $' ' < filename

出力:

123 zyx
234 yxw
345 xwv
456 wvu
567 vut
678 uts

あなたはsedこれが好きかもしれません:

sed 's/-/ /g' < filename

出力:

123 zyx
234 yxw
345 xwv
456 wvu
567 vut
678 uts

答え2

次のオプションが利用可能です-s

column -s- -t file

答え3

表示されている入力データの例./inそれから...

<in >out tr -- - \\t

...二つあげる<タブ>名前付きファイルの区切り列./out

ただし、状況に応じてtrテキストを使用したい場合があります。<タブ>最後の2文字を置き換える文字です。実際には、最後の2つの区切り文字を必要な別の区切り記号に自由に置き換える必要があります。

答え4

Bashのみ:

# VERSION 1

while IFS=$'-' read -a line
do
    printf '%s %s\n' ${line[@]}
done < infile > outfile

または...

# VERSION 2

main(){ 
  local IFS=$'-\n'
  local a=( $(<infile) )
  printf '%s %s\n' ${a[@]} > outfile
}

main

または...

# VERSION 3

while IFS= read -r line
do
  printf '%s\n' "${line/-/ }"
done < infile > outfile

しかし、注意してください。見てください。この投稿大容量ファイルへの適用を検討している場合。


楽しみながら、中規模のファイルに対していくつかのベンチマークを実行してみてください。結果は次のとおりです。 "tr" が最良の選択であり、次に sed、次に awk です。最高のBashはバージョン2です(trより625倍遅く、82倍多くのメモリを使用します)。これと比較して、sedはtrより7.5倍遅く、awkはtrより9倍遅いです。

$ stat -c %s bigdata.txt && wc -l bigdata.txt
1439952
179994 bigdata.txt

# tr '-' $' ' < "$1" > tr.txt

CPU TIME AND RESOURCE USAGE OF './tr bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :    0.02
CPU, pct :   97.10
RAM, kb  : 1390.00

# sed 's/-/ /g' < "$1" > sed.txt

CPU TIME AND RESOURCE USAGE OF './sed bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :    0.15
CPU, pct :   98.90
RAM, kb  : 1386.80

# awk 'BEGIN{FS="-"} ; { print $1,$2 }' "$1" > awk.txt

CPU TIME AND RESOURCE USAGE OF './awk bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :    0.18
CPU, pct :   98.80
RAM, kb  : 1402.00

# BASH: VERSION 1

CPU TIME AND RESOURCE USAGE OF './bash_1 bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :   16.35
CPU, pct :   99.00
RAM, kb  : 1486.40

# BASH: VERSION 2

CPU TIME AND RESOURCE USAGE OF './bash_2 bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :   12.51
CPU, pct :   99.40
RAM, kb  : 114002.40

# BASH: VERSION 3

CPU TIME AND RESOURCE USAGE OF './bash_3 bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :   15.45
CPU, pct :   99.00
RAM, kb  : 1484.00

関連情報