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
참고: 파일/명령에 추가 줄이 있는 경우 출력의 해당 줄은 공백이 됩니다. 따라서 두 파일의 줄 수가 동일한지 확인하십시오.
답변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
'