file1.dat
다음 내용을 포함하는 구분된 텍스트 파일입니다. 해당 열의 $COL
각 구분 기호에 텍스트 문자열을 추가하여 세 번째 열을 변경하고 싶습니다.#
모든 줄에 대해 이 작업을 수행하고 동일한 이름으로 파일을 저장하고 싶습니다.
누구든지 도와줄 수 있나요?
입력 샘플
name|class|colors|age|email
abc|xyz|#orange#green#pink#blue|16|[email protected]
pqr|xyz|#orange#green#pink#blue|20|[email protected]
원하는 출력
name|class|colors|age|email
abc|xyz|#orange$COL#green$COL#pink$COL#blue$COL|16|[email protected]
pqr|xyz|#orange$COL#green$COL#pink$COL#blue$COL|20|[email protected]
답변1
$COL
귀하의 예에서는 로 시작하는 줄의 각 문자열 끝에 추가하려고 합니다 #
. 이 간단한 경우에는 다음과 같이 간단히 수행할 수 있습니다.
$ sed -E 's/(#[^#|]*)/\1$COL/g' file
name|class|colors|age|email
abc|xyz|#orange$COL#green$COL#pink$COL#blue$COL|16|[email protected]
pqr|xyz|#orange$COL#green$COL#pink$COL#blue$COL|20|[email protected]
또는 sed
지원하지 않는 경우 -E
:
sed 's/\(#[^#|]*\)/\1$COL/g' file
-i
다음을 사용하여 해당 위치에서 파일을 편집 할 수 있습니다 .
sed -i -E 's/(#[^#|]*)/\1$COL/g' file
보다 일반적인 경우, 구분된 문자열 $COL
에 대한 추가 내용을 바꾸려면 #
세 번째 구분된 필드에서만 |
다음을 수행할 수 있습니다.
$ awk -F'|' -vOFS='|' 'NR>1{gsub(/#[^#|]*/,"&$COL",$3)}1' file
name|class|colors|age|email
abc|xyz|#orange$COL#green$COL#pink$COL#blue$COL|16|[email protected]
pqr|xyz|#orange$COL#green$COL#pink$COL#blue$COL|20|[email protected]
최신 버전의 GNU에서는 다음을 사용하여 파일을 편집 awk
할 수 있습니다 .-i inplace
awk -iinplace -F'|' -vOFS='|' 'NR>1{gsub(/#[^#|]*/,"&$COL",$3)}1'
#
마지막으로, 재미를 위해 Perl을 사용하여 모든 -defend 문자열을 변경할 수도 있습니다 .
perl -pe 's/(#[^#|]+)/$1\$COL/g' file
또는 세 번째 열에서 다음을 수행합니다.
perl -F'\|' -lane '$F[2]=~s/(#[^#|]+)/$1\$COL/g; print join "|",@F' file
또는 세 번째 열에서 이 작업을 수행하고 첫 번째 행을 건너뜁니다.
perl -F'\|' -lane '$F[2]=~s/(#[^#|]+)/$1\$COL/g if $.>1; print join "|",@F' file
두 경우 모두 -i
파일을 그 자리에서 편집할 수 있습니다.