A.txt 파일이 있습니다.
RS0255_RS0083:115,124,129,141,143,168,170,180
RS0343_RS0083:112,113,163,175,181
RS0343_RS0255:94,101,107,164,179,183
다음 숫자에 대해 수학 연산을 수행하고 싶습니다. 예를 들어 각 숫자에 10을 더하고 싶습니다. 출력:
RS0255_RS0083:125,134,139,151,153,178,180,190
RS0343_RS0083:122,123,173,185,191
RS0343_RS0255:104,111,117,174,189,193
perl
R에서 이 작업을 수행하는 방법을 알고 있지만 R의 파일에 있는 숫자에 대한 수학을 어떻게 수행합니까 awk
?
답변1
실제로 텍스트 파일에 대해 다양한 작업을 수행하는 데 사용할 수 있는 도구가 수십 개 있습니다. 당신이 언급한 특정한 경우에는 아마도 Perl을 사용할 것입니다.
$ perl -pe 's/\b(\d+)\b/$1 + 10/ge' fileA.txt
RS0255_RS0083:125,134,139,151,153,178,180,190
RS0343_RS0083:122,123,173,185,191
RS0343_RS0255:104,111,117,174,189,193
답변2
gawk '$0+0 == $0 {$0 += 10} {ORS = RT} 1' RS='[:,\n]' file
답변3
답변 awk
: 각 행을 두 개의 :
분리된 필드로 구문 분석합니다. 두 번째 필드를 사용하여 split()
쉼표로 구분된 필드로 분할하고 루프에서 분할 필드를 수정하여 새 출력 레코드를 생성합니다. 그런 다음 쉼표를 구분 기호로 사용하고 원래 첫 번째 필드를 "접두사"로 사용하여 새 레코드를 출력합니다.
awk -F : '
BEGIN { OFS = "," }
{
prefix = $1
nf = split($2,a,",")
$0 = ""
for (i = 1; i <= nf; ++i)
$i = a[i] + 10
printf "%s:%s\n", prefix, $0
}' fileA.txt
출력은 다음과 같습니다
RS0255_RS0083:125,134,139,151,153,178,180,190
RS0343_RS0083:122,123,173,185,191
RS0343_RS0255:104,111,117,174,189,193
위 코드를 보다 간결하게 표현하면 다음과 같습니다(한 줄이 "더 낫다"고 생각하는 사람들을 위한).
awk -F: '{p=$1;n=split($2,a,",");$0="";for(i=1;i<n;++i)$i=a[i]+10;printf "%s:%s\n",p,$0}' OFS=, fileA.txt
위의 답변만큼 "좋지" 않은 이전 답변입니다.
각 줄을 awk
or로 구분된 필드 목록으로 사용하고 해석하면 각 줄의 두 번째 필드에 10을 추가합니다.:
,
awk -F '[:,]' 'BEGIN { OFS="," } { for (i = 2; i <= NF; ++i) $i += 10 }; 1' fileA.txt
이것이 당신에게 줄 것입니다
RS0255_RS0083,125,134,139,151,153,178,180,190
RS0343_RS0083,122,123,173,185,191
RS0343_RS0255,104,111,117,174,189,193
각 줄의 첫 번째 쉼표를 다시 a로 변경하려면 :
다음을 사용하세요 sed 's/,/:/'
.
awk -F '[:,]' 'BEGIN { OFS="," } { for (i = 2; i <= NF; ++i) $i += 10 }; 1' fileA.txt |
sed 's/,/:/'
답변4
나는 이것을 제안합니다 awk
:
$ awk -F':|,' 'BEGIN { OFS="" }
$1 = $1":" {
OFS="";
for(i=2; i<=NF; i++) {
$i = $i + 10;
if ( i != NF ) {
$i = $i","
}
};
}1' file
RS0255_RS0083:125,134,139,151,153,178,180,190
RS0343_RS0083:122,123,173,185,191
RS0343_RS0255:104,111,117,174,189,193