Unix: 追加値列をファイルに印刷

Unix: 追加値列をファイルに印刷

new_file.txt値列(200)を含む.txtファイル()があります。その横に値0,1/200,2/200....1を使用して別の列を印刷する必要があります。どうすればいいですか?私はこれについてとても新しいものなので、どんなアドバイスでもいいでしょう!

seq 0 0.005 1 >new_file.txtこれはファイルとして印刷されることを知っていますが、すでに存在する値を上書きします。この数字をすでにファイル内の値の横に別の列として追加したいと思います。

次のように入力します。

2.41
2.56 

他の列では。のように見えるために必要です。

2.41 0
2.56 0.005

他の列では。その間にタブが必要です。

答え1

そして:seqpaste

seq 0 0.005 1 | paste newfile.txt - > newerfile.txt

そしてawk

awk '{$2 = 0.005*(NR-1)} 1' OFS='\t' newfile.txt > newerfile.txt

バージョンに応じてそのバージョンを変更することもawkできます。newfile.txt

答え2

コメントで述べたように、pasteこれは目的のタスクを実行するのに最適なオプションです。

 paste new_file.txt <sequence file>

実行時にシーケンスを生成する場合

seq 0 0.005 1 | paste new_file.txt /dev/stdin

はい(5レコードの場合new_file.txt

~$ seq 0 0.005 0.020 | paste new_file.txt /dev/stdin
2.41    0.000
2.56    0.005
2.71    0.010
2.86    0.015
3.01    0.020

注:ファイル/コマンドに追加の行がある場合、出力の対応する行は空白になります。したがって、2つのファイルの行数が同じであることを確認してください。

答え3

GNU dc以下を使用してこれを実行できます。

< new_file.txt tr -- - _ | dc -e "[q]sq [?z1=qrd1<qrn32anp0.005+dd=?]s? 0l?x"

説明する:

dc -e '
# macro for quitting
[q]sq

# macro to read next line and perform operations
[
   ? z1=q  # read next line and quit when it is empty. The 1 is apriori
   r       # else, reverse the stack elements so that sum is top of stack now
   d1<q    # quit if current sum is more than 1
   r       # else, reverse the stack elements so that line is top of stack now
   n 32an p # print the line, space (32a is ascii decimal for space), & print current sum
   0.005+   # update the current sum for next round
   dd=?     # recursively invoke itself for more.... its a loop essentially
]s?

# initialize stack and start operations
0 l?x
'

関連情報