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
そして:seq
paste
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
'