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

참고: 파일/명령에 추가 줄이 있는 경우 출력의 해당 줄은 공백이 됩니다. 따라서 두 파일의 줄 수가 동일한지 확인하십시오.

답변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
'

관련 정보