다음 레코드가 포함된 MDD.TXT 파일이 있습니다. 파일: MDD.TXT
0|ABC|055309|20120929053309|11965150
0|ABC|061434|20120929063434|11155537
0|ABC|070228|20120929073228|11965150
0|ABC|082213|20120929583213|11965150
0|ABC|083950|20120929983950|11965150
0|ABC|084112|20120929083112|11965150
이제 두 번째 열을 "XYZ"로 바꾸고 두 개의 열 filename과 "Success"를 모든 레코드에 추가하려고 합니다. 원하는 출력은 다음과 같아야 합니다.
0|XYZ|055309|20120929053309|11965150|MDD.TXT|SUCCESS
0|XYZ|061434|20120929063434|11155537|MDD.TXT|SUCCESS
0|XYZ|070228|20120929073228|11965150|MDD.TXT|SUCCESS
0|XYZ|082213|20120929583213|11965150|MDD.TXT|SUCCESS
0|XYZ|083950|20120929983950|11965150|MDD.TXT|SUCCESS
0|XYZ|084112|20120929083112|11965150|MDD.TXT|SUCCESS
답변1
sed
당신은 또한 사용할 수 있습니다
$ sed -e 's/\bABC\b/XYZ/g' -e 's/$/|MDD.TXT|SUCCESS/g' MDD.TXT
파일을 직접 수정
$ sed -i -e 's/\bABC\b/XYZ/g' -e 's/$/|MDD.TXT|SUCCESS/g' MDD.TXT
원본 파일을 유지하고 원하는 출력을 다른 파일로 리디렉션
$ sed -e 's/\bABC\b/XYZ/g' -e 's/$/|MDD.TXT|SUCCESS/g' MDD.TXT >> MDD_MODIFFIED.TXT
답변2
다음을 시도해 볼 수 있습니다 awk
.
awk 'BEGIN { FS = OFS = "|" } { $2 = "XYZ"; $6 = ARGV[1]; $7 = "SUCCESS";} 1' MDD.TXT
또는:
awk 'BEGIN { FS = OFS = "|" } { $2 = "XYZ"; print $0 OFS ARGV[1] OFS "SUCCESS"; }' MDD.TXT
답변3
그리고 awk
:
awk 'BEGIN{OFS=FS="|"} {$2="XYZ"; $0=$0"|"FILENAME"|SUCCESS"}1' mdd.txt
어디:
BEGIN{}
모든 줄이 아닌 처음에만 실행됩니다.OFS=FS="|"
입력 및 출력 필드 구분 기호를 로 설정합니다|
.$2="XYZ"
두 번째 필드를 다음으로 설정합니다.XYZ
$0=...
FILENAME
awk
( 내부 변수 에서 )SUCCESS
전체 행에 문자열로 추가됩니다.
답변4
이는 기존 답변과 동일 awk
하지만 더 간결합니다.
awk -F'|' -vOFS="|" '{$2="XYZ"; print $0,"MDD.TXT","SUCCESS"}' MDD.TXT
파일 이름(모든 파일 이름에 대해)을 자동으로 추가하려면 다음을 사용하십시오.
awk -F'|' -vOFS="|" '{$2="XYZ"; print $0,ARGV[1],"SUCCESS"}' MDD.TXT
-F
입력 레코드 구분자를 설정 하고 변수 및 출력 레코드 구분자를 -vOFS
설정합니다 . OFS
그런 다음 두 번째 필드를 로 설정하고 XYZ
행( $0
), 파일 이름( ARGV[1]
) 및 SUCCESS
.
귀하의 예에서 각 줄에는 후행 공백이 있으므로 제안된 솔루션을 실행하면 다음과 같은 결과가 발생합니다.
$ awk -F'|' -vOFS="|" '{$2="XYZ"; print $0,ARGV[1],"SUCCESS"}' MDD.TXT
0|XYZ|055309|20120929053309|11965150 |MDD.TXT|SUCCESS
0|XYZ|061434|20120929063434|11155537 |MDD.TXT|SUCCESS
0|XYZ|070228|20120929073228|11965150 |MDD.TXT|SUCCESS
0|XYZ|082213|20120929583213|11965150 |MDD.TXT|SUCCESS
0|XYZ|083950|20120929983950|11965150 |MDD.TXT|SUCCESS
0|XYZ|084112|20120929083112|11965150|MDD.TXT|SUCCESS
이를 방지하려면 입력 필드 구분 기호를 다음과 같이 설정할 수 있습니다.|
또는공간:
$ awk -F' |' -vOFS="|" '{$2="XYZ"; print $0,ARGV[1],"SUCCESS"}' MDD.TXT
0|ABC|055309|20120929053309|11965150|XYZ|||MDD.TXT|SUCCESS
0|ABC|061434|20120929063434|11155537|XYZ||MDD.TXT|SUCCESS
0|ABC|070228|20120929073228|11965150|XYZ||MDD.TXT|SUCCESS
0|ABC|082213|20120929583213|11965150|XYZ||MDD.TXT|SUCCESS
0|ABC|083950|20120929983950|11965150|XYZ||MDD.TXT|SUCCESS
0|ABC|084112|20120929083112|11965150|XYZ|MDD.TXT|SUCCESS
또는 파일을 구문 분석하기 전에 후행 공백을 제거할 수 있습니다.
sed 's/\s*$//' MDD.TXT |
awk -F' |' -vOFS="|" '{$2="XYZ"; print $0,"MDD.TXT|SUCCESS"}'